| #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 */ |