Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. #ifndef __EFMT_H
  2. #define __EFMT_H
  3.  
  4. #ifndef __PACKED__
  5. #define __PACKED__      __attribute__((packed))
  6. #endif
  7.  
  8. typedef struct
  9. {
  10.     unsigned long magic         __PACKED__;
  11.     unsigned char bitness       __PACKED__;
  12.     unsigned char endian        __PACKED__;
  13.     unsigned char elf_ver_1     __PACKED__;
  14.     unsigned char res[9]        __PACKED__;
  15.     unsigned short file_type    __PACKED__;
  16.     unsigned short machine      __PACKED__;
  17.     unsigned long elf_ver_2     __PACKED__;
  18.     unsigned long entry_pt      __PACKED__;
  19.     unsigned long phtab_offset  __PACKED__;
  20.     unsigned long shtab_offset  __PACKED__;
  21.     unsigned long flags         __PACKED__;
  22.     unsigned short file_hdr_size __PACKED__;
  23.     unsigned short phtab_ent_size __PACKED__;
  24.     unsigned short num_phtab_ents __PACKED__;
  25.     unsigned short shtab_ent_size __PACKED__;
  26.     unsigned short num_sects    __PACKED__;
  27.     unsigned short shstrtab_index __PACKED__;
  28. } elf_file_t;
  29.  
  30. typedef struct
  31. {
  32.     unsigned long sect_name     __PACKED__;
  33.     unsigned long type          __PACKED__;
  34.     unsigned long flags         __PACKED__;
  35.     unsigned long virt_adr      __PACKED__;
  36.     unsigned long offset        __PACKED__;
  37.     unsigned long size          __PACKED__;
  38.     unsigned long link          __PACKED__;
  39.     unsigned long info          __PACKED__;
  40.     unsigned long align         __PACKED__;
  41.     unsigned long ent_size      __PACKED__;
  42. } elf_sect_t;
  43.  
  44. typedef struct
  45. {
  46.     unsigned long adr           __PACKED__;
  47.     unsigned char type          __PACKED__;
  48.     unsigned long symtab_index:24 __PACKED__;
  49.     unsigned long addend        __PACKED__;
  50. } elf_reloc_t;
  51.  
  52. typedef struct
  53. {
  54.     unsigned long name          __PACKED__;
  55.     unsigned long value         __PACKED__;
  56.     unsigned long size          __PACKED__;
  57.     unsigned type:4             __PACKED__;
  58.     unsigned binding:4          __PACKED__;
  59.     unsigned char zero          __PACKED__;
  60.     unsigned short section      __PACKED__;
  61. } elf_sym_t;
  62.  
  63. typedef struct
  64. {
  65.  unsigned char * file, * sects,*bss,*symtab;
  66.  char * strtab;
  67.  unsigned long bss_sect_num,entry;
  68. } exe_file_t;
  69.  
  70. int get_elf_section_name(exe_file_t * f,unsigned short sect_num,char * namebuf);
  71. int get_elf_section_addr(exe_file_t * f,unsigned short sect_num,unsigned long * adr);
  72. int get_elf_symbol_addr(exe_file_t * f,unsigned long i,
  73.     unsigned long * sym_val,unsigned short sect_num,
  74.     int (* lookup_fn)(char * symname,unsigned long * val));
  75. int do_elf_relocation(exe_file_t * f,elf_reloc_t * reloc,
  76.  unsigned short sect_num,unsigned long symtab_sect_num,
  77.  int (* sym_lookup_fn)(char * symname,unsigned long * val),int ignore_ext);
  78. int get_elf_section_index(exe_file_t * f,char * sect_name,unsigned long * i);
  79. int elf_load_from_mem(exe_file_t * f);
  80. int relocate_elf_file(exe_file_t * f,
  81.  int (* sym_lookup_fn)(char * symname,unsigned long * val),int ignore_ext);
  82. int get_elf_symbol_value(exe_file_t * f,char * symname,unsigned long * symval);
  83.  
  84.  
  85. #endif
  86.