1 | // Format of an ELF executable file |
2 | |
3 | #define ELF_MAGIC 0x464C457FU // "\x7FELF" in little endian |
4 | |
5 | // File header |
6 | struct elfhdr { |
7 | uint magic; // must equal ELF_MAGIC |
8 | uchar elf[12]; |
9 | ushort type; |
10 | ushort machine; |
11 | uint version; |
12 | uint entry; |
13 | uint phoff; |
14 | uint shoff; |
15 | uint flags; |
16 | ushort ehsize; |
17 | ushort phentsize; |
18 | ushort phnum; |
19 | ushort shentsize; |
20 | ushort shnum; |
21 | ushort shstrndx; |
22 | }; |
23 | |
24 | // Program section header |
25 | struct proghdr { |
26 | uint type; |
27 | uint off; |
28 | uint vaddr; |
29 | uint paddr; |
30 | uint filesz; |
31 | uint memsz; |
32 | uint flags; |
33 | uint align; |
34 | }; |
35 | |
36 | // Values for Proghdr type |
37 | #define ELF_PROG_LOAD 1 |
38 | |
39 | // Flag bits for Proghdr flags |
40 | #define ELF_PROG_FLAG_EXEC 1 |
41 | #define ELF_PROG_FLAG_WRITE 2 |
42 | #define ELF_PROG_FLAG_READ 4 |
43 | |