20#define ELF_IDENT_MAG0 0
21#define ELF_IDENT_MAG1 1
22#define ELF_IDENT_MAG2 2
23#define ELF_IDENT_MAG3 3
24#define ELF_IDENT_CLASS 4
25#define ELF_IDENT_DATA 5
26#define ELF_IDENT_VERSION 6
27#define ELF_IDENT_OSABI 7
28#define ELF_IDENT_ABIVERSION 8
29#define ELF_IDENT_PAD 9
38#define ELF_CLASS_NONE 0
43#define ELF_DATA_NONE 0
44#define ELF_DATA_2LSB 1
45#define ELF_DATA_2MSB 2
48#define ELF_VERSION_NONE 0
49#define ELF_VERSION_CURRENT 1
52#define ELF_OSABI_SYSV 0
53#define ELF_OSABI_HPUX 1
54#define ELF_OSABI_NETBSD 2
55#define ELF_OSABI_LINUX 3
56#define ELF_OSABI_SOLARIS 6
57#define ELF_OSABI_AIX 7
58#define ELF_OSABI_IRIX 8
59#define ELF_OSABI_FREEBSD 9
60#define ELF_OSABI_TRU64 10
61#define ELF_OSABI_MODESTO 11
62#define ELF_OSABI_OPENBSD 12
63#define ELF_OSABI_ARM_AEABI 64
64#define ELF_OSABI_ARM 97
65#define ELF_OSABI_STANDALONE 255
69#define ELF_HDR_TYPE_NONE 0x0
70#define ELF_HDR_TYPE_REL 0x1
71#define ELF_HDR_TYPE_EXEC 0x2
72#define ELF_HDR_TYPE_DYN 0x3
73#define ELF_HDR_TYPE_CORE 0x4
74#define ELF_HDR_TYPE_LOW_PROC 0xff00
75#define ELF_HDR_TYPE_HIGH_PROC 0xffff
79#define ELF_HDR_MACHINE_NONE 0x00
80#define ELF_HDR_MACHINE_M32 0x01
81#define ELF_HDR_MACHINE_SPARC 0x02
82#define ELF_HDR_MACHINE_386 0x03
83#define ELF_HDR_MACHINE_68K 0x04
84#define ELF_HDR_MACHINE_88K 0x05
85#define ELF_HDR_MACHINE_860 0x07
86#define ELF_HDR_MACHINE_MIPS 0x08
87#define ELF_HDR_MACHINE_PARISC 0x0F
88#define ELF_HDR_MACHINE_SPARC32PLUS 0x12
89#define ELF_HDR_MACHINE_PPC 0x14
90#define ELF_HDR_MACHINE_PPC64 0x15
91#define ELF_HDR_MACHINE_S390 0x16
92#define ELF_HDR_MACHINE_ARM 0x28
93#define ELF_HDR_MACHINE_SH 0x2A
94#define ELF_HDR_MACHINE_SPARCV9 0x2B
95#define ELF_HDR_MACHINE_IA64 0x32
96#define ELF_HDR_MACHINE_X86_64 0x3E
97#define ELF_HDR_MACHINE_AARCH64 0xB7
98#define ELF_HDR_MACHINE_RISCV 0xF3
102#define ELF_HDR_VERSION_NONE 0
103#define ELF_HDR_VERSION_1 1
107#define ELF_PHDR_TYPE_NULL 0
108#define ELF_PHDR_TYPE_LOAD 1
109#define ELF_PHDR_TYPE_DYNAMIC 2
110#define ELF_PHDR_TYPE_INTERP 3
111#define ELF_PHDR_TYPE_NOTE 4
112#define ELF_PHDR_TYPE_SHLIB 5
113#define ELF_PHDR_TYPE_PHDR 6
114#define ELF_PHDR_TYPE_TLS 7
115#define ELF_PHDR_TYPE_LOW_OS 0x60000000
116#define ELF_PHDR_TYPE_HIGH_OS 0x6fffffff
117#define ELF_PHDR_TYPE_LOW_PROC 0x70000000
118#define ELF_PHDR_TYPE_HIGH_PROC 0x7fffffff
120#define ELF_PHDR_TYPE_GNU_EH_FRAME (ELF_PHDR_TYPE_LOW_OS + 0x474e550)
121#define ELF_PHDR_TYPE_GNU_STACK (ELF_PHDR_TYPE_LOW_OS + 0x474e551)
122#define ELF_PHDR_TYPE_GNU_RELRO (ELF_PHDR_TYPE_LOW_OS + 0x474e552)
123#define ELF_PHDR_TYPE_GNU_PROPERTY (ELF_PHDR_TYPE_LOW_OS + 0x474e553)
127#define ELF_PHDR_FLAGS_EXECUTE (1 << 0)
128#define ELF_PHDR_FLAGS_WRITE (1 << 1)
129#define ELF_PHDR_FLAGS_READ (1 << 2)
133#define ELF_SHDR_TYPE_NULL 0
134#define ELF_SHDR_TYPE_PROGBITS 1
135#define ELF_SHDR_TYPE_SYMTAB 2
136#define ELF_SHDR_TYPE_STRTAB 3
137#define ELF_SHDR_TYPE_RELA 4
138#define ELF_SHDR_TYPE_HASH 5
139#define ELF_SHDR_TYPE_DYNAMIC 6
140#define ELF_SHDR_TYPE_NOTE 7
141#define ELF_SHDR_TYPE_NOBITS 8
142#define ELF_SHDR_TYPE_REL 9
143#define ELF_SHDR_TYPE_SHLIB 10
144#define ELF_SHDR_TYPE_DYNSYM 11
145#define ELF_SHDR_TYPE_INIT_ARRAY 14
146#define ELF_SHDR_TYPE_FINI_ARRAY 15
147#define ELF_SHDR_TYPE_PREINIT_ARRAY 16
148#define ELF_SHDR_TYPE_GROUP 17
149#define ELF_SHDR_TYPE_SYMTAB_SHNDX 18
150#define ELF_SHDR_TYPE_LOW_OS 0x60000000
151#define ELF_SHDR_TYPE_HIGH_OS 0x6fffffff
152#define ELF_SHDR_TYPE_LOW_PROC 0x70000000
153#define ELF_SHDR_TYPE_HIGH_PROC 0x7fffffff
154#define ELF_SHDR_TYPE_LOW_USER 0x80000000
155#define ELF_SHDR_TYPE_HIGH_USER 0x8fffffff
159#define ELF_SHDR_FLAGS_WRITE (1 << 0)
160#define ELF_SHDR_FLAGS_ALLOC (1 << 1)
161#define ELF_SHDR_FLAGS_EXECINSTR (1 << 2)
162#define ELF_SHDR_FLAGS_MERGE (1 << 4)
163#define ELF_SHDR_FLAGS_STRINGS (1 << 5)
164#define ELF_SHDR_FLAGS_INFO_LINK (1 << 6)
165#define ELF_SHDR_FLAGS_LINK_ORDER (1 << 7)
166#define ELF_SHDR_FLAGS_OS_NONCONFORMING (1 << 8)
167#define ELF_SHDR_FLAGS_GROUP (1 << 9)
168#define ELF_SHDR_FLAGS_TLS (1 << 10)
169#define ELF_SHDR_FLAGS_COMPRESSED (1 << 11)
170#define ELF_SHDR_FLAGS_MASKOS 0x0ff00000
171#define ELF_SHDR_FLAGS_MASKPROC 0xf0000000
174#define ELF_SHN_UNDEF 0
175#define ELF_SHN_LORESERVE 0xff00
176#define ELF_SHN_LOPROC 0xff00
177#define ELF_SHN_HIPROC 0xff1f
178#define ELF_SHN_LOOS 0xff20
179#define ELF_SHN_HIOS 0xff3f
180#define ELF_SHN_ABS 0xfff1
181#define ELF_SHN_COMMON 0xfff2
182#define ELF_SHN_XINDEX 0xffff
183#define ELF_SHN_HIRESERVE 0xffff
186#define ELF_ST_BIND(info) ((info) >> 4)
187#define ELF_ST_TYPE(info) ((info) & 0xf)
188#define ELF_ST_INFO(bind, type) (((bind) << 4) + ((type) & 0xf))
191#define ELF_STB_LOCAL 0
192#define ELF_STB_GLOBAL 1
193#define ELF_STB_WEAK 2
194#define ELF_STB_LOOS 10
195#define ELF_STB_HIOS 12
196#define ELF_STB_LOPROC 13
197#define ELF_STB_HIPROC 15
200#define ELF_STT_NOTYPE 0
201#define ELF_STT_OBJECT 1
202#define ELF_STT_FUNC 2
203#define ELF_STT_SECTION 3
204#define ELF_STT_FILE 4
205#define ELF_STT_COMMON 5
207#define ELF_STT_LOOS 10
208#define ELF_STT_HIOS 12
209#define ELF_STT_LOPROC 13
210#define ELF_STT_HIPROC 15
214#define ELF_DT_NEEDED 1
215#define ELF_DT_PLTRELSZ 2
216#define ELF_DT_PLTGOT 3
218#define ELF_DT_STRTAB 5
219#define ELF_DT_SYMTAB 6
221#define ELF_DT_RELASZ 8
222#define ELF_DT_RELAENT 9
223#define ELF_DT_STRSZ 10
224#define ELF_DT_SYMENT 11
225#define ELF_DT_INIT 12
226#define ELF_DT_FINI 13
227#define ELF_DT_SONAME 14
228#define ELF_DT_RPATH 15
229#define ELF_DT_SYMBOLIC 16
231#define ELF_DT_RELSZ 18
232#define ELF_DT_RELENT 19
233#define ELF_DT_PLTREL 20
234#define ELF_DT_DEBUG 21
235#define ELF_DT_TEXTREL 22
236#define ELF_DT_JMPREL 23
237#define ELF_DT_BIND_NOW 24
238#define ELF_DT_INIT_ARRAY 25
239#define ELF_DT_FINI_ARRAY 26
240#define ELF_DT_INIT_ARRAYSZ 27
241#define ELF_DT_FINI_ARRAYSZ 28
242#define ELF_DT_RUNPATH 29
243#define ELF_DT_FLAGS 30
244#define ELF_DT_ENCODING 32
245#define ELF_DT_PREINIT_ARRAY 32
246#define ELF_DT_PREINIT_ARRAYSZ 33
247#define ELF_DT_SYMTAB_SHNDX 34
248#define ELF_DT_LOW_OS 0x6000000d
249#define ELF_DT_HIGH_OS 0x6ffff000
250#define ELF_DT_LOW_PROC 0x70000000
251#define ELF_DT_HIGH_PROC 0x7fffffff
263#define ELF_IS_VALID(hdr) \
264 ((hdr)->ident[ELF_IDENT_MAG0] == ELF_MAG0 && (hdr)->ident[ELF_IDENT_MAG1] == ELF_MAG1 && \
265 (hdr)->ident[ELF_IDENT_MAG2] == ELF_MAG2 && (hdr)->ident[ELF_IDENT_MAG3] == ELF_MAG3 && \
266 (hdr)->ident[ELF_IDENT_CLASS] == ELF_CLASS_64 && (hdr)->ident[ELF_IDENT_DATA] == ELF_DATA_2LSB && \
267 (hdr)->ident[ELF_IDENT_VERSION] == ELF_VERSION_CURRENT && (hdr)->ident[ELF_IDENT_OSABI] == ELF_OSABI_SYSV && \
268 (hdr)->machine == ELF_HDR_MACHINE_X86_64 && (hdr)->version == ELF_HDR_VERSION_1)
uint32_t elf_hdr_version_t
uint16_t elf_hdr_machine_t
uint32_t elf_phdr_flags_t
uint64_t elf_shdr_flags_t
elf_hdr_version_t version
elf_hdr_machine_t machine
ELF relocation entry without addend.
ELF relocation entry with addend.