| 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 | |