Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4680 | right-hear | 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 |