From a4543a9ffcc52f205a8c2aaa56909acda4e9d0b1 Mon Sep 17 00:00:00 2001 From: Malfurious Date: Wed, 22 Feb 2023 15:01:22 -0500 Subject: symtbl: Rename file to match class name I assume that the preferred style is to leave one major class each to a file. In this case, synchronize the names of the Symtbl class and its containing module. Per PEP8, the module is lowercase, and the class remains Pascal case. If other memory-oriented utilities are introduced in the future, we may wish to move them, as well as Symtbl, back into a subpackage named 'mem'. Signed-off-by: Malfurious Signed-off-by: dusoleil --- sploit/__init__.py | 2 +- sploit/mem.py | 53 ----------------------------------------------------- sploit/payload.py | 2 +- sploit/rev/r2.py | 4 ++-- sploit/symtbl.py | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 57 insertions(+), 57 deletions(-) delete mode 100644 sploit/mem.py create mode 100644 sploit/symtbl.py (limited to 'sploit') diff --git a/sploit/__init__.py b/sploit/__init__.py index 5bac38f..9a38a78 100644 --- a/sploit/__init__.py +++ b/sploit/__init__.py @@ -2,8 +2,8 @@ from sploit import ( arch, comm, log, - mem, payload, + symtbl, until, util, rev, diff --git a/sploit/mem.py b/sploit/mem.py deleted file mode 100644 index 3a3e697..0000000 --- a/sploit/mem.py +++ /dev/null @@ -1,53 +0,0 @@ -import types - -class Symtbl: - def __init__(self, *, base=0, **kwargs): - object.__setattr__(self, '_namesp', types.SimpleNamespace(base=base,sym={},sub={})) - for k, v in {**kwargs}.items(): - setattr(self, k, v) - - def __getattr__(self, ident): - self = self._namesp - if ident == 'base': return self.base - off = self.base + self.sym[ident] - if ident in self.sub: return self.sub[ident].map(off) - return off - - def __setattr__(self, ident, value): - if ident in dir(self): raise Exception(f'Symtbl: assignment would shadow non-symbol "{ident}"') - self = self._namesp - if ident == 'base': - self.base = value - else: - if type(value) is tuple: self.sub[ident], off = value - else: off = value - self.sym[ident] = off - self.base - - def map(self, addr, off=0): - self = self._namesp - mm = Symtbl() - mm._namesp.sym, mm._namesp.sub = self.sym, self.sub - mm._namesp.base = addr - off - return mm - - def adjust(self, off): - self = self._namesp - for k, v in self.sym.items(): - self.sym[k] = v + off - - def rebase(self, off): - self.adjust(self.base - off) - - def __str__(_self): - FMT = '\n{:<20} {:<20}' - self = _self._namesp - - s = f'{len(self.sym)} symbols @ {hex(_self.base)}' - s += FMT.format('ADDRESS', 'SYMBOL') - for sym, _ in sorted(self.sym.items(), key=lambda x:x[1]): - addr = getattr(_self, sym) - if type(addr) is Symtbl: - s += FMT.format(hex(addr.base), f'[{sym}]') - else: - s += FMT.format(hex(addr), sym) - return s diff --git a/sploit/payload.py b/sploit/payload.py index c916514..1110e76 100644 --- a/sploit/payload.py +++ b/sploit/payload.py @@ -1,5 +1,5 @@ from sploit.arch import arch, itob -from sploit.mem import Symtbl +from sploit.symtbl import Symtbl class Payload: MAGIC = b'\xef' diff --git a/sploit/rev/r2.py b/sploit/rev/r2.py index 6dfd499..5f7632a 100644 --- a/sploit/rev/r2.py +++ b/sploit/rev/r2.py @@ -1,7 +1,7 @@ -from sploit.mem import Symtbl from sploit.arch import arch -from sploit.util import run_cmd_cached from sploit.log import ilog +from sploit.symtbl import Symtbl +from sploit.util import run_cmd_cached import re from collections import namedtuple as nt diff --git a/sploit/symtbl.py b/sploit/symtbl.py new file mode 100644 index 0000000..3a3e697 --- /dev/null +++ b/sploit/symtbl.py @@ -0,0 +1,53 @@ +import types + +class Symtbl: + def __init__(self, *, base=0, **kwargs): + object.__setattr__(self, '_namesp', types.SimpleNamespace(base=base,sym={},sub={})) + for k, v in {**kwargs}.items(): + setattr(self, k, v) + + def __getattr__(self, ident): + self = self._namesp + if ident == 'base': return self.base + off = self.base + self.sym[ident] + if ident in self.sub: return self.sub[ident].map(off) + return off + + def __setattr__(self, ident, value): + if ident in dir(self): raise Exception(f'Symtbl: assignment would shadow non-symbol "{ident}"') + self = self._namesp + if ident == 'base': + self.base = value + else: + if type(value) is tuple: self.sub[ident], off = value + else: off = value + self.sym[ident] = off - self.base + + def map(self, addr, off=0): + self = self._namesp + mm = Symtbl() + mm._namesp.sym, mm._namesp.sub = self.sym, self.sub + mm._namesp.base = addr - off + return mm + + def adjust(self, off): + self = self._namesp + for k, v in self.sym.items(): + self.sym[k] = v + off + + def rebase(self, off): + self.adjust(self.base - off) + + def __str__(_self): + FMT = '\n{:<20} {:<20}' + self = _self._namesp + + s = f'{len(self.sym)} symbols @ {hex(_self.base)}' + s += FMT.format('ADDRESS', 'SYMBOL') + for sym, _ in sorted(self.sym.items(), key=lambda x:x[1]): + addr = getattr(_self, sym) + if type(addr) is Symtbl: + s += FMT.format(hex(addr.base), f'[{sym}]') + else: + s += FMT.format(hex(addr), sym) + return s -- cgit v1.2.3