about summary refs log tree commit diff stats
path: root/miasm2/analysis
diff options
context:
space:
mode:
Diffstat (limited to 'miasm2/analysis')
-rw-r--r--miasm2/analysis/cst_propag.py17
-rw-r--r--miasm2/analysis/depgraph.py4
-rw-r--r--miasm2/analysis/dse.py9
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):