| #ifndef ELF_H | |
| #define ELF_H | |
| /** | |
| * @file | |
| * | |
| * ELF headers | |
| * | |
| */ | |
| FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); | |
| #include <stdint.h> | |
| typedef uint32_t Elf32_Addr; | |
| typedef uint16_t Elf32_Half; | |
| typedef uint32_t Elf32_Off; | |
| typedef int32_t Elf32_Sword; | |
| typedef uint32_t Elf32_Word; | |
| /** Length of ELF identifier */ | |
| #define EI_NIDENT 16 | |
| /** ELF header */ | |
| typedef struct { | |
| unsigned char e_ident[EI_NIDENT]; | |
| Elf32_Half e_type; | |
| Elf32_Half e_machine; | |
| Elf32_Word e_version; | |
| Elf32_Addr e_entry; | |
| Elf32_Off e_phoff; | |
| Elf32_Off e_shoff; | |
| Elf32_Word e_flags; | |
| Elf32_Half e_ehsize; | |
| Elf32_Half e_phentsize; | |
| Elf32_Half e_phnum; | |
| Elf32_Half e_shentsize; | |
| Elf32_Half e_shnum; | |
| Elf32_Half e_shstrndx; | |
| } Elf32_Ehdr; | |
| /* ELF identifier indexes */ | |
| #define EI_MAG0 0 | |
| #define EI_MAG1 1 | |
| #define EI_MAG2 2 | |
| #define EI_MAG3 3 | |
| #define EI_CLASS 4 | |
| #define EI_DATA 5 | |
| #define EI_VERSION 6 | |
| /* ELF magic signature bytes */ | |
| #define ELFMAG0 0x7f | |
| #define ELFMAG1 'E' | |
| #define ELFMAG2 'L' | |
| #define ELFMAG3 'F' | |
| /* ELF classes */ | |
| #define ELFCLASS32 1 | |
| /* ELF data encodings */ | |
| #define ELFDATA2LSB 1 | |
| /* ELF versions */ | |
| #define EV_CURRENT 1 | |
| /** ELF program header */ | |
| typedef struct { | |
| Elf32_Word p_type; | |
| Elf32_Off p_offset; | |
| Elf32_Addr p_vaddr; | |
| Elf32_Addr p_paddr; | |
| Elf32_Word p_filesz; | |
| Elf32_Word p_memsz; | |
| Elf32_Word p_flags; | |
| Elf32_Word p_align; | |
| } Elf32_Phdr; | |
| /* ELF segment types */ | |
| #define PT_LOAD 1 | |
| #endif /* ELF_H */ |