from ..construct import ( | |
UBInt8, UBInt16, UBInt32, UBInt64, | |
ULInt8, ULInt16, ULInt32, ULInt64, | |
SBInt32, SLInt32, SBInt64, SLInt64, | |
Struct, Array, | |
) | |
class ELFStructs(object): | |
def __init__(self, little_endian=True, elfclass=32): | |
assert elfclass == 32 or elfclass == 64 | |
self.little_endian = little_endian | |
self.elfclass = elfclass | |
self._create_structs() | |
def _create_structs(self): | |
if self.little_endian: | |
self.Elf_byte = ULInt8 | |
self.Elf_half = ULInt16 | |
self.Elf_word = ULInt32 | |
self.Elf_addr = ULInt32 if self.elfclass == 32 else ULInt64 | |
self.Elf_offset = self.Elf_addr | |
self.Elf_sword = SLInt32 | |
self.Elf_xword = ULInt64 | |
self.Elf_sxword = SLInt64 | |
else: | |
self.Elf_byte = UBInt8 | |
self.Elf_half = UBInt16 | |
self.Elf_word = UBInt32 | |
self.Elf_addr = UBInt32 if self.elfclass == 32 else UBInt64 | |
self.Elf_offset = self.Elf_addr | |
self.Elf_sword = SBInt32 | |
self.Elf_xword = UBInt64 | |
self.Elf_sxword = SBInt64 | |
self.Elf_Ehdr = Struct('Elf_Ehdr', | |