""" #define EI_NIDENT 16 typedef struct { unsigned char e_ident[EI_NIDENT]; 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; } ElfN_Ehdr; """ @dataclass class ElfEhdr: e_ident: bytes e_type: int e_machine: int e_version: int e_entry: int e_phoff: int e_shoff: int e_flags: int e_ehsize: int e_phentsize: int e_phnum: int e_shentsize: int e_shnum: int e_shstrndx: int ELFMAG0 = 0x7f ELFMAG1 = ord('E') ELFMAG2 = ord('L') ELFMAG3 = ord('F') EI_NIDENT = 16 elf_ident_fields = [ ("EI_MAG0", 0), ("EI_MAG1", 1), ("EI_MAG2", 2), ("EI_MAG3", 3), ("EI_CLASS", 4), ("EI_DATA", 5), ("EI_VERSION", 6), ("EI_OSABI", 7), ("EI_ABIVERSION", 8), ("EI_PAD", 9), ] class ElfClass(IntEnum): NONE = 0 CLASS32 = 1 CLASS64 = 2 class ElfData(IntEnum): NONE = 0 LSB = 1 MSB = 2 class OsABI(IntEnum): NONE = 0 HPUX = 1 NETBSD = 2 GNU = 3 SOLARIS = 6 AIX = 7 IRIX = 8 FREEBSD = 9 TRU64 = 10 MODESTO = 11 OPENBSD = 12 ARM_AEABI = 64 ARM = 97 STANDALONE = 255