diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2017-10-03 17:20:38 +0200 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2018-03-15 14:46:36 +0100 |
| commit | 1b534d9ad543473f12ddcb631e0cddb0cbd54ff4 (patch) | |
| tree | 5d5248ceb9358a1f497f4830e821e50afb340dba /miasm2/analysis/cst_propag.py | |
| parent | edabfcda0fa8c0dd8ab3017853b375b1ee24b754 (diff) | |
| download | miasm-1b534d9ad543473f12ddcb631e0cddb0cbd54ff4.tar.gz miasm-1b534d9ad543473f12ddcb631e0cddb0cbd54ff4.zip | |
Symbexec: use hashtable for mem symbols
Diffstat (limited to 'miasm2/analysis/cst_propag.py')
| -rw-r--r-- | miasm2/analysis/cst_propag.py | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/miasm2/analysis/cst_propag.py b/miasm2/analysis/cst_propag.py index 7946a496..18829627 100644 --- a/miasm2/analysis/cst_propag.py +++ b/miasm2/analysis/cst_propag.py @@ -86,7 +86,7 @@ class SymbExecStateFix(SymbolicExecutionEngine): to_propag[element] = value return expr_simp(expr.replace_expr(to_propag)) - def emulbloc(self, irb, step=False): + def eval_updt_irblock(self, irb, step=False): """ Symbolic execution of the @irb on the current state @irb: IRBlock instance @@ -104,12 +104,13 @@ class SymbExecStateFix(SymbolicExecutionEngine): dst = ExprMem(ptr, dst.size) new_assignblk[dst] = src - for arg in assignblk.instr.args: - new_arg = self.propag_expr_cst(arg) - links[new_arg] = arg - self.cst_propag_link[(irb.label, index)] = links + if assignblk.instr is not None: + for arg in assignblk.instr.args: + new_arg = self.propag_expr_cst(arg) + links[new_arg] = arg + self.cst_propag_link[(irb.label, index)] = links - self.eval_ir(assignblk) + self.eval_updt_assignblk(assignblk) assignblks.append(AssignBlock(new_assignblk, assignblk.instr)) self.ir_arch.blocks[irb.label] = IRBlock(irb.label, assignblks) @@ -143,7 +144,7 @@ def compute_cst_propagation_states(ir_arch, init_addr, init_infos): continue symbexec_engine = SymbExecState(ir_arch, state) - addr = symbexec_engine.emul_ir_block(lbl) + addr = symbexec_engine.run_block_at(lbl) symbexec_engine.del_mem_above_stack(ir_arch.sp) for dst in possible_values(addr): @@ -177,5 +178,5 @@ def propagate_cst_expr(ir_arch, addr, init_infos): if lbl not in ir_arch.blocks: continue symbexec = SymbExecStateFix(ir_arch, state, cst_propag_link) - symbexec.emulbloc(ir_arch.blocks[lbl]) + symbexec.eval_updt_irblock(ir_arch.blocks[lbl]) return cst_propag_link |