diff options
| author | Camille Mougey <commial@gmail.com> | 2018-03-15 15:35:31 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-03-15 15:35:31 +0100 |
| commit | 50a0b480a729507c8e49af39588592fbfb5476b1 (patch) | |
| tree | 5d5248ceb9358a1f497f4830e821e50afb340dba /miasm2/analysis/cst_propag.py | |
| parent | edabfcda0fa8c0dd8ab3017853b375b1ee24b754 (diff) | |
| parent | 1b534d9ad543473f12ddcb631e0cddb0cbd54ff4 (diff) | |
| download | miasm-50a0b480a729507c8e49af39588592fbfb5476b1.tar.gz miasm-50a0b480a729507c8e49af39588592fbfb5476b1.zip | |
Merge pull request #699 from serpilliere/symb_mem_hash
Symbexec: use hashtable for mem symbols
Diffstat (limited to '')
| -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 |