ncloader  0.1
 모두 데이타 구조 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 매크로 그룹들 페이지들
elf0.h
이 파일의 문서화 페이지로 가기
1 
10 typedef unsigned long Elf32_Addr;
11 typedef unsigned short Elf32_Half;
12 typedef unsigned long Elf32_Off;
13 typedef unsigned long Elf32_Sword;
14 typedef unsigned long Elf32_Word;
16 #define ELF32_ST_BIND(i) ((i)>>4)
17 #define ELF32_ST_TYPE(i) ((i) & 0xf)
18 #define ELF32_ST_INFO(b, t) (((b) << 4) + ((t) & 0xf))
19 #define ELF32_SET_ST_TYPE(v, i) ((v) = ((v) & 0xF0) | ((i) & 0x0F))
20 #define ELF32_R_SYM(i) ((i) >> 8)
21 #define ELF32_R_TYPE(i) ((unsigned char)(i))
22 
23 #define INVALID (~0)
24 
25 enum E_TYPE {
26  ET_NONE = 0,
27  ET_REL = 1,
28  ET_EXEC = 2,
29  ET_DYN = 3,
30  ET_CORE = 4,
31  ET_LOPROC = 0xff00,
32  ET_HIPROC = 0xffff,
33 };
34 
35 enum E_MACHINE {
36  EM_NONE = 0,
37  EM_M32 = 1,
38  EM_SPARC = 2,
39  EM_386 = 3,
40  EM_68K = 4,
41  EM_88K = 5,
42  EM_860 = 7,
43  EM_MIPS = 8,
44 };
45 
46 enum E_VERSION {
47  EV_NONE = 0,
49 };
50 
52  EI_MAG0 = 0,
53  EI_MAG1 = 1,
54  EI_MAG2 = 2,
55  EI_MAG3 = 3,
56  EI_CLASS = 4,
57  EI_DATA = 5,
58  EI_VERSION = 6,
59  EI_PAD = 7,
60  EI_NIDENT = 16,
61 };
62 
63 enum ELF_MAGIC {
64  ELFMAG0 = 0x7f,
65  ELFMAG1 = 'E',
66  ELFMAG2 = 'L',
67  ELFMAG3 = 'F',
68 };
69 
70 enum EFL_CLASS {
72  ELFCLASS32 = 1,
73  ELFCLASS64 = 2,
74 };
75 
76 enum EI_DATA {
80 };
81 
82 typedef struct elf_header {
83  unsigned char e_ident[EI_NIDENT];
97 } Elf32_Hdr;
98 
99 enum DT_TAG {
100  DT_NULL = 0,
104  DT_HASH = 4,
107  DT_RELA = 7,
110  DT_STRSZ = 10,
111  DT_SYMENT = 11,
112  DT_INIT = 12,
113  DT_FINI = 13,
114  DT_SONAME = 14,
115  DT_RPATH = 15,
117  DT_REL = 17,
118  DT_RELSZ = 18,
119  DT_RELENT = 19,
120  DT_PLTREL = 20,
121  DT_DEBUG = 21,
123  DT_JMPREL = 23,
124  DT_LOPROC = 0x70000000,
125  DT_HIPROC = 0x7fffffff,
126 };
127 
128 struct elf32_dyn {
130  union {
133  } d_un;
134 };
135 
136 enum {
137  GRP_COMDAT = 0x01,
138 };
139 
140 struct group {
143 };
144 
145 typedef struct {
154 } Elf32_Phdr;
155 
157  PF_X = 0x01,
158  PF_W = 0x02,
159  PF_R = 0x04,
160  PF_MASKPROC = 0xF0000000,
161 };
162 
163 enum SegmentType {
164  PT_NULL = 0x00,
165  PT_LOAD = 0x01,
166  PT_DYNAMIC = 0x02,
167  PT_INTERP = 0x03,
168  PT_NOTE = 0x04,
169  PT_SHLIB = 0x05,
170  PT_PHDR = 0x06,
171  PT_LOPROC = 0x70000000,
172  PT_HIPROC = 0x7fffffff,
173 };
174 
175 enum REL_TYPE {
176  R_386_NONE = 0, // none none
177  R_386_32 = 1, // word32 S + A
178  R_386_PC32 = 2, // word32 S + A - P
179  R_386_GOT32 = 3, // word32 G + A - P
180  R_386_PLT32 = 4, // word32 L + A - P
181  R_386_COPY = 5, // none none
182  R_386_GLOB_DAT = 6, // word32 S
183  R_386_JMP_SLOT = 7, // word32 S
184  R_386_RELATIVE = 8, // word32 B + A
185  R_386_GOTOFF = 9, // word32 S + A - GOT
186  R_386_GOTPC = 10, // word32 GOT + A - P
187 };
188 
189 struct Elf32_Rel {
192 };
193 
194 enum ST_TYPE {
197  STT_FUNC = 2,
199  STT_FILE = 4,
202 };
203 
204 enum ST_BIND {
207  STB_WEAK = 2,
210 };
211 
212 enum {
214 };
215 
216 struct SymbolTable {
220  unsigned char st_info;
221  unsigned char st_other;
223 };
224 
225 enum SH_TYPE {
226  SHT_NULL = 0,
230  SHT_RELA = 4,
231  SHT_HASH = 5,
233  SHT_NOTE = 7,
235  SHT_REL = 9,
236  SHT_SHLIB = 10,
241  SHT_GROUP = 17,
243  SHT_LOPROC = 0x70000000,
244  SHT_HIPROC = 0x7fffffff,
245  SHT_LOUSER = 0x80000000,
246  SHT_HIUSER = 0xffffffff,
247 };
248 
249 enum SH_FLAG {
250  SHF_WRITE = 0x01,
251  SHF_ALLOC = 0x02,
253  SHF_MERGE = 0x10,
254  SHF_STRINGS = 0x20,
258  SHF_GROUP = 0x200,
259  SHF_TLS = 0x400,
260  SHF_MASKOS = 0xff000000,
261  SHF_AMD64_LARGE = 0x10000000,
262  SHF_ORDERED = 0x40000000,
263  SHF_EXCLUDE = 0x80000000,
264  SHF_MASKPROC = 0xf0000000,
265 };
266 
267 enum SH_IDX {
269  SHN_LORESERVE = 0xff00,
270  SHN_LOPROC = 0xff00,
271  SHN_BEFORE = 0xff00,
272  SHN_AFTER = 0xff01,
273  SHN_HIPROC = 0xff1f,
274  SHN_LOOS = 0xff20,
275  SHN_HIOS = 0xff3f,
276  SHN_ABS = 0xfff1,
277  SHN_COMMON = 0xfff2,
278  SHN_XINDEX = 0xffff,
279  SHN_HIRESERVE = 0xffff,
280 };
281 
282 typedef struct SectionHeader {
293 } Elf32_Shdr;
294 
295 #define IS_TEXT(flags)(((flags) & SHF_EXECINSTR) == SHF_EXECINSTR && ((flags) & SHF_ALLOC) == SHF_ALLOC)
296 #define IS_RODATA(flags) (((flags) & SHF_ALLOC) == SHF_ALLOC && ((flags) & SHF_WRITE) != SHF_WRITE && ((flags) & SHF_EXECINSTR) != SHF_EXECINSTR)
297 #define IS_RWDATA(flags) (((flags) & SHF_ALLOC) == SHF_ALLOC && ((flags) & SHF_WRITE) == SHF_WRITE && ((flags) & SHF_EXECINSTR) != SHF_EXECINSTR)
298 
299 struct Elf32_Rela {
303 };
304