diff options
Diffstat (limited to 'miasm2/analysis')
| -rw-r--r-- | miasm2/analysis/cst_propag.py | 17 | ||||
| -rw-r--r-- | miasm2/analysis/depgraph.py | 4 | ||||
| -rw-r--r-- | miasm2/analysis/dse.py | 9 |
3 files changed, 16 insertions, 14 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 diff --git a/miasm2/analysis/depgraph.py b/miasm2/analysis/depgraph.py index bd4bfa7e..f7949c88 100644 --- a/miasm2/analysis/depgraph.py +++ b/miasm2/analysis/depgraph.py @@ -299,7 +299,7 @@ class DependencyResult(DependencyState): # Eval the block temp_label = AsmLabel("Temp") symb_exec = SymbolicExecutionEngine(self._ira, ctx_init) - symb_exec.emulbloc(IRBlock(temp_label, assignblks), step=step) + symb_exec.eval_updt_irblock(IRBlock(temp_label, assignblks), step=step) # Return only inputs values (others could be wrongs) return {element: symb_exec.symbols[element] @@ -368,7 +368,7 @@ class DependencyResultImplicit(DependencyResult): irb = self.irblock_slice(self._ira.blocks[label], line_nb) # Emul the block and get back destination - dst = symb_exec.emulbloc(irb, step=step) + dst = symb_exec.eval_updt_irblock(irb, step=step) # Add constraint if hist_nb < history_size: diff --git a/miasm2/analysis/dse.py b/miasm2/analysis/dse.py index 38c9aeaf..0a5445a6 100644 --- a/miasm2/analysis/dse.py +++ b/miasm2/analysis/dse.py @@ -106,7 +106,8 @@ class ESETrackModif(EmulatedSymbExec): # symbolize def _func_read(self, expr_mem): - assert expr_mem.arg.is_int() + if not expr_mem.arg.is_int(): + return expr_mem dst_addr = int(expr_mem.arg) if not self.dse_memory_range: @@ -310,7 +311,7 @@ class DSEEngine(object): # Is the symbolic execution going (potentially) to jump on a lbl_gen? if len(self.ir_arch.blocks) == 1: - next_addr = self.symb.emul_ir_blocks(cur_addr) + next_addr = self.symb.run_at(cur_addr) else: # Emulation could stuck in generated IR blocks # But concrete execution callback is not enough precise to obtain @@ -320,8 +321,8 @@ class DSEEngine(object): # Update the concrete execution self._update_state_from_concrete_symb(self.symb_concrete) while True: - next_addr_concrete = self.symb_concrete.emul_ir_block(cur_addr) - self.symb.emul_ir_block(cur_addr) + next_addr_concrete = self.symb_concrete.run_block_at(cur_addr) + self.symb.run_block_at(cur_addr) if not(expr_is_label(next_addr_concrete) and next_addr_concrete.name.offset is None): |