# Copyright 2006 Falling Leaf Systems, LLC. # Refer to LICENSE in the root directory. import struct from fileformat import * PT_NULL = 0 PT_LOAD = 1 PT_DYNAMIC = 2 PT_INTERP = 3 PT_NOTE = 4 PT_SHLIB = 5 PT_PHDR = 6 PT_LOOS = 0x60000000 PT_HIOS = 0x6fffffff PT_LOPROC = 0x70000000 PT_HIPROC = 0x7fffffff PT_GNU_EH_FRAME = 0x6474e550 ET_NONE = 0 ET_REL = 1 ET_EXEC = 2 ET_DYN = 3 ET_CORE = 4 ET_LOPROC = 0xff00 ET_HIPROC = 0xffff EM_NONE = 0 EM_M32 = 1 EM_SPARC = 2 EM_386 = 3 EM_68K = 4 EM_88K = 5 EM_486 = 6 EM_860 = 7 class ELF(FileFormat): capabilities = (FILEFORMAT_WRITE, FILEFORMAT_READ) def read(self, fp): """ Read file from given file pointer @param fp: File pointer toinput file @type fp: C{file} @return: This L{FileFormat} object after reading from the file @rtype: L{FileFormat} """ assert(fp.read(4) == '\x7FELF') e_ident = fp.read(12) filetype, machine, version,\ entry, phoff,shoff,\ flags, ehsize, phentsize,\ phnum, shentsize, shnum,\ shstrndx = struct.unpack('= sec.addr and addr < sec.addr + sec.size: section = i break i += 1 if i == -1: i = 0xfffe symtab.append((nameoff, addr, 0, typ, section)) nameoff += len(sym) + 1 data = '' for sym in symtab: data += struct.pack('