diff options
Diffstat (limited to 'miasm/ir/symbexec.py')
| -rw-r--r-- | miasm/ir/symbexec.py | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/miasm/ir/symbexec.py b/miasm/ir/symbexec.py index ee8e4924..2acd293d 100644 --- a/miasm/ir/symbexec.py +++ b/miasm/ir/symbexec.py @@ -17,16 +17,16 @@ log.addHandler(console_handler) log.setLevel(logging.INFO) -def get_block(ir_arch, ircfg, mdis, addr): +def get_block(lifter, ircfg, mdis, addr): """Get IRBlock at address @addr""" loc_key = ircfg.get_or_create_loc_key(addr) if not loc_key in ircfg.blocks: offset = mdis.loc_db.get_location_offset(loc_key) block = mdis.dis_block(offset) - ir_arch.add_asmblock_to_ircfg(block, ircfg) + lifter.add_asmblock_to_ircfg(block, ircfg) irblock = ircfg.get_block(loc_key) if irblock is None: - raise LookupError('No block found at that address: %s' % ir_arch.loc_db.pretty_str(loc_key)) + raise LookupError('No block found at that address: %s' % lifter.loc_db.pretty_str(loc_key)) return irblock @@ -764,14 +764,14 @@ class SymbolicExecutionEngine(object): from miasm.ir.symbexec import SymbolicExecutionEngine from miasm.ir.ir import AssignBlock - ir_arch = Lifter_X86_32() + lifter = Lifter_X86_32() init_state = { - ir_arch.arch.regs.EAX: ir_arch.arch.regs.EBX, + lifter.arch.regs.EAX: lifter.arch.regs.EBX, ExprMem(id_x+ExprInt(0x10, 32), 32): id_a, } - sb_exec = SymbolicExecutionEngine(ir_arch, init_state) + sb_exec = SymbolicExecutionEngine(lifter, init_state) >>> sb_exec.dump() EAX = a @@ -779,7 +779,7 @@ class SymbolicExecutionEngine(object): >>> sb_exec.dump(mems=False) EAX = a - >>> print sb_exec.eval_expr(ir_arch.arch.regs.EAX + ir_arch.arch.regs.ECX) + >>> print sb_exec.eval_expr(lifter.arch.regs.EAX + lifter.arch.regs.ECX) EBX + ECX Inspecting state: @@ -796,14 +796,14 @@ class SymbolicExecutionEngine(object): - eval_updt_assignblk - eval_updt_irblock - Start a symbolic execution based on provisioned '.ir_arch' blocks: + Start a symbolic execution based on provisioned '.lifter' blocks: - run_block_at - run_at """ StateEngine = SymbolicState - def __init__(self, ir_arch, state=None, + def __init__(self, lifter, state=None, sb_expr_simp=expr_simp_explicit): self.expr_to_visitor = { @@ -820,14 +820,19 @@ class SymbolicExecutionEngine(object): if state is None: state = {} - self.symbols = SymbolMngr(addrsize=ir_arch.addrsize, expr_simp=sb_expr_simp) + self.symbols = SymbolMngr(addrsize=lifter.addrsize, expr_simp=sb_expr_simp) for dst, src in viewitems(state): self.symbols.write(dst, src) - self.ir_arch = ir_arch + self.lifter = lifter self.expr_simp = sb_expr_simp + @property + def ir_arch(self): + warnings.warn('DEPRECATION WARNING: use ".lifter" instead of ".ir_arch"') + return self.lifter + def get_state(self): """Return the current state of the SymbolicEngine""" state = self.StateEngine(dict(self.symbols)) @@ -837,7 +842,7 @@ class SymbolicExecutionEngine(object): """Restaure the @state of the engine @state: StateEngine instance """ - self.symbols = SymbolMngr(addrsize=self.ir_arch.addrsize, expr_simp=self.expr_simp) + self.symbols = SymbolMngr(addrsize=self.lifter.addrsize, expr_simp=self.expr_simp) for dst, src in viewitems(dict(state)): self.symbols[dst] = src @@ -884,7 +889,7 @@ class SymbolicExecutionEngine(object): def eval_exprloc(self, expr, **kwargs): """[DEV]: Evaluate an ExprLoc using the current state""" - offset = self.ir_arch.loc_db.get_location_offset(expr.loc_key) + offset = self.lifter.loc_db.get_location_offset(expr.loc_key) if offset is not None: ret = ExprInt(offset, expr.size) else: @@ -1040,7 +1045,7 @@ class SymbolicExecutionEngine(object): self.dump(mems=False) self.dump(ids=False) print('_' * 80) - dst = self.eval_expr(self.ir_arch.IRDst) + dst = self.eval_expr(self.lifter.IRDst) return dst |