def platformParseBinary(self, filename, baseaddr, normname): typemap = { Elf.STT_FUNC: e_resolv.FunctionSymbol, Elf.STT_SECTION: e_resolv.SectionSymbol, } try: fd = self.platformOpenFile(filename) elf = Elf.Elf(fd) except IOError: try: # it's possible we hit vdso or something similar elf = Elf.elfFromMemoryObject(self, baseaddr) except: raise # elf = Elf.Elf(fd) addbase = 0 if not elf.isPreLinked() and elf.isSharedObject(): addbase = baseaddr for sec in elf.sections: sym = e_resolv.SectionSymbol(sec.name, sec.sh_addr + addbase, sec.sh_size, normname) self.addSymbol(sym) for sym in elf.symbols: symclass = typemap.get((sym.st_info & 0xf), e_resolv.Symbol) sym = symclass(sym.name, sym.st_value + addbase, sym.st_size, normname) self.addSymbol(sym) for sym in elf.dynamic_symbols: symclass = typemap.get((sym.st_info & 0xf), e_resolv.Symbol) sym = symclass(sym.name, sym.st_value + addbase, sym.st_size, normname) self.addSymbol(sym) if elf.isExecutable(): sym = e_resolv.Symbol('__entry', elf.e_entry, 0, normname) self.addSymbol(sym)
def platformParseBinary(self, filename, baseaddr, normname): typemap = { Elf.STT_FUNC: e_resolv.FunctionSymbol, Elf.STT_SECTION: e_resolv.SectionSymbol, } try: fd = self.platformOpenFile(filename) elf = Elf.Elf(fd) except IOError: try: # it's possible we hit vdso or something similar elf = Elf.elfFromMemoryObject(self, baseaddr) except: raise # elf = Elf.Elf(fd) addbase = 0 if not elf.isPreLinked() and elf.isSharedObject(): addbase = baseaddr for sec in elf.sections: sym = e_resolv.SectionSymbol(sec.name, sec.sh_addr+addbase, sec.sh_size, normname) self.addSymbol(sym) for sym in elf.symbols: symclass = typemap.get((sym.st_info & 0xf), e_resolv.Symbol) sym = symclass(sym.name, sym.st_value+addbase, sym.st_size, normname) self.addSymbol(sym) for sym in elf.dynamic_symbols: symclass = typemap.get((sym.st_info & 0xf), e_resolv.Symbol) sym = symclass(sym.name, sym.st_value+addbase, sym.st_size, normname) self.addSymbol(sym) if elf.isExecutable(): sym = e_resolv.Symbol('__entry', elf.e_entry, 0, normname) self.addSymbol(sym)