diff options
Diffstat (limited to 'miasm/analysis/cst_propag.py')
| -rw-r--r-- | miasm/analysis/cst_propag.py | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/miasm/analysis/cst_propag.py b/miasm/analysis/cst_propag.py index dd7733b0..cdb62d3c 100644 --- a/miasm/analysis/cst_propag.py +++ b/miasm/analysis/cst_propag.py @@ -19,8 +19,8 @@ class SymbExecState(SymbolicExecutionEngine): """ State manager for SymbolicExecution """ - def __init__(self, ir_arch, ircfg, state): - super(SymbExecState, self).__init__(ir_arch, {}) + def __init__(self, lifter, ircfg, state): + super(SymbExecState, self).__init__(lifter, {}) self.set_state(state) @@ -40,16 +40,16 @@ def add_state(ircfg, todo, states, addr, state): states[addr] = states[addr].merge(state) -def is_expr_cst(ir_arch, expr): +def is_expr_cst(lifter, expr): """Return true if @expr is only composed of ExprInt and init_regs - @ir_arch: IR instance + @lifter: Lifter instance @expr: Expression to test""" elements = expr.get_r(mem_read=True) for element in elements: if element.is_mem(): continue - if element.is_id() and element in ir_arch.arch.regs.all_regs_ids_init: + if element.is_id() and element in lifter.arch.regs.all_regs_ids_init: continue if element.is_int(): continue @@ -65,11 +65,11 @@ class SymbExecStateFix(SymbolicExecutionEngine): """ # Function used to test if an Expression is considered as a constant - is_expr_cst = lambda _, ir_arch, expr: is_expr_cst(ir_arch, expr) + is_expr_cst = lambda _, lifter, expr: is_expr_cst(lifter, expr) - def __init__(self, ir_arch, ircfg, state, cst_propag_link): + def __init__(self, lifter, ircfg, state, cst_propag_link): self.ircfg = ircfg - super(SymbExecStateFix, self).__init__(ir_arch, {}) + super(SymbExecStateFix, self).__init__(lifter, {}) self.set_state(state) self.cst_propag_link = cst_propag_link @@ -83,7 +83,7 @@ class SymbExecStateFix(SymbolicExecutionEngine): if not element.is_id(): continue value = self.eval_expr(element) - if self.is_expr_cst(self.ir_arch, value): + if self.is_expr_cst(self.lifter, value): to_propag[element] = value return expr_simp(expr.replace_expr(to_propag)) @@ -116,13 +116,13 @@ class SymbExecStateFix(SymbolicExecutionEngine): self.ircfg.blocks[irb.loc_key] = IRBlock(irb.loc_db, irb.loc_key, assignblks) -def compute_cst_propagation_states(ir_arch, ircfg, init_addr, init_infos): +def compute_cst_propagation_states(lifter, ircfg, init_addr, init_infos): """ Propagate "constant expressions" in a function. The attribute "constant expression" is true if the expression is based on constants or "init" regs values. - @ir_arch: Lifter instance + @lifter: Lifter instance @init_addr: analysis start address @init_infos: dictionary linking expressions to their values at @init_addr """ @@ -144,9 +144,9 @@ def compute_cst_propagation_states(ir_arch, ircfg, init_addr, init_infos): if lbl not in ircfg.blocks: continue - symbexec_engine = SymbExecState(ir_arch, ircfg, state) + symbexec_engine = SymbExecState(lifter, ircfg, state) addr = symbexec_engine.run_block_at(ircfg, lbl) - symbexec_engine.del_mem_above_stack(ir_arch.sp) + symbexec_engine.del_mem_above_stack(lifter.sp) for dst in possible_values(addr): value = dst.value @@ -163,23 +163,23 @@ def compute_cst_propagation_states(ir_arch, ircfg, init_addr, init_infos): return states -def propagate_cst_expr(ir_arch, ircfg, addr, init_infos): +def propagate_cst_expr(lifter, ircfg, addr, init_infos): """ - Propagate "constant expressions" in a @ir_arch. + Propagate "constant expressions" in a @lifter. The attribute "constant expression" is true if the expression is based on constants or "init" regs values. - @ir_arch: Lifter instance + @lifter: Lifter instance @addr: analysis start address @init_infos: dictionary linking expressions to their values at @init_addr Returns a mapping between replaced Expression and their new values. """ - states = compute_cst_propagation_states(ir_arch, ircfg, addr, init_infos) + states = compute_cst_propagation_states(lifter, ircfg, addr, init_infos) cst_propag_link = {} for lbl, state in viewitems(states): if lbl not in ircfg.blocks: continue - symbexec = SymbExecStateFix(ir_arch, ircfg, state, cst_propag_link) + symbexec = SymbExecStateFix(lifter, ircfg, state, cst_propag_link) symbexec.eval_updt_irblock(ircfg.blocks[lbl]) return cst_propag_link |