#include #include // #define EI_NIDENT 16 // #define ElfN_Addr uintptr_t // #define ElfN_Off size_t typedef uintptr_t ElfN_Addr; typedef size_t ElfN_Off; typedef size_t ElfN_size; typedef struct { unsigned char e_ident[16]; uint16_t e_type; uint16_t e_machine; uint32_t e_version; ElfN_Addr e_entry; ElfN_Off e_phoff; ElfN_Off e_shoff; uint32_t e_flags; uint16_t e_ehsize; uint16_t e_phentsize; uint16_t e_phnum; uint16_t e_shentsize; uint16_t e_shnum; uint16_t e_shstrndx; } Ehdr; typedef struct { uint32_t sh_name; uint32_t sh_type; ElfN_size sh_flags; ElfN_Addr sh_addr; ElfN_Off sh_offset; ElfN_size sh_size; uint32_t sh_link; uint32_t sh_info; ElfN_size sh_addralign; ElfN_size sh_entsize; } Shdr; typedef struct { uint32_t st_name; ElfN_Addr st_value; ElfN_size st_size; uint8_t st_info; uint8_t st_other; uint16_t st_shndx; } Sym32; typedef struct { uint32_t st_name; uint8_t st_info; uint8_t st_other; uint16_t st_shndx; ElfN_Addr st_value; ElfN_size st_size; } Sym64;