blob: 1957c1580b6de23dd18c011aa5599c864db75071 (
plain) (
tree)
|
|
from sploit.rev import ldd, r2
class ELF:
def __init__(self, path):
self.path = path
self.sym = r2.get_elf_symbols(self.path)
libs = ldd.get_libraries(self.path)
self.libs = {lib.name:ELF(lib.path) for lib in libs.values() if lib.path}
self.locals = self.__LOCALS__(self)
def __str__(self):
s = 'ELF: '
s += self.path
s += '\nSymbol Table'
s += '\n------------'
s += '\n'
s += str(self.sym)
s += '\n------------'
s += '\nLibararies'
s += '\n------------'
for name,lib in self.libs.items():
s += '\n' + str(name) + ' => ' + str(lib.path)
return s
class __LOCALS__:
def __init__(self,elf):
self.elf = elf
def __getattribute__(self, sym):
if(sym=='elf'):return object.__getattribute__(self,sym)
return r2.get_locals(self.elf.path, getattr(self.elf.sym, sym))
def retaddr(self, caller, callee):
return [c.ret_addr for c in r2.get_call_returns(self.path, caller, callee)]
def retgad(self):
return r2.ret_gadget(self.path)
def gad(self, gad):
return [g.addr for g in r2.rop_gadget(self.path, gad)]
def egad(self, gad):
return r2.rop_gadget_exact(self.path, gad).addr
|