1/* 2 * Copyright 2002-2009, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6// No header guard: The file is included twice by <Elf.h> and must not be 7// included elsewhere. The _ELFX_BITS macro must be define before inclusion. 8 9 10#undef ElfX 11 12#if _ELFX_BITS == 32 13# define ElfX(x) Elf32_##x 14#elif _ELFX_BITS == 64 15# define ElfX(x) Elf64_##x 16#endif 17 18 19// object file header 20typedef struct { 21 unsigned char e_ident[EI_NIDENT]; 22 ElfX(Half) e_type; 23 ElfX(Half) e_machine; 24 ElfX(Word) e_version; 25 ElfX(Addr) e_entry; 26 ElfX(Off) e_phoff; 27 ElfX(Off) e_shoff; 28 ElfX(Word) e_flags; 29 ElfX(Half) e_ehsize; 30 ElfX(Half) e_phentsize; 31 ElfX(Half) e_phnum; 32 ElfX(Half) e_shentsize; 33 ElfX(Half) e_shnum; 34 ElfX(Half) e_shstrndx; 35} ElfX(Ehdr); 36 37// program header 38typedef struct { 39 ElfX(Word) p_type; 40#if _ELFX_BITS == 64 41 ElfX(Word) p_flags; 42#endif 43 ElfX(Off) p_offset; 44 ElfX(Addr) p_vaddr; 45 ElfX(Addr) p_paddr; 46 ElfX(Xword) p_filesz; 47 ElfX(Xword) p_memsz; 48#if _ELFX_BITS == 32 49 ElfX(Word) p_flags; 50#endif 51 ElfX(Xword) p_align; 52} ElfX(Phdr); 53 54// section header 55typedef struct { 56 ElfX(Word) sh_name; 57 ElfX(Word) sh_type; 58 ElfX(Xword) sh_flags; 59 ElfX(Addr) sh_addr; 60 ElfX(Off) sh_offset; 61 ElfX(Xword) sh_size; 62 ElfX(Word) sh_link; 63 ElfX(Word) sh_info; 64 ElfX(Xword) sh_addralign; 65 ElfX(Xword) sh_entsize; 66} ElfX(Shdr); 67 68#undef ElfX 69