about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--miasm/analysis/data_flow.py15
-rw-r--r--miasm/arch/arm/sem.py6
-rw-r--r--miasm/os_dep/win_api_x86_32.py1
-rw-r--r--test/arch/arm/arch.py5
4 files changed, 18 insertions, 9 deletions
diff --git a/miasm/analysis/data_flow.py b/miasm/analysis/data_flow.py
index 40a3b94e..7340c023 100644
--- a/miasm/analysis/data_flow.py
+++ b/miasm/analysis/data_flow.py
@@ -9,7 +9,7 @@ from miasm.ir.ir import AssignBlock, IRBlock
 from miasm.expression.expression import ExprLoc, ExprMem, ExprId, ExprInt,\
     ExprAssign, ExprOp, ExprWalk, ExprSlice, \
     is_function_call, ExprVisitorCallbackBottomToTop
-from miasm.expression.simplifications import expr_simp
+from miasm.expression.simplifications import expr_simp, expr_simp_explicit
 from miasm.core.interval import interval
 from miasm.expression.expression_helper import possible_values
 from miasm.analysis.ssa import get_phi_sources_parent_block, \
@@ -133,7 +133,7 @@ class DiGraphDefUse(DiGraph):
 
 
     def __init__(self, reaching_defs,
-                 deref_mem=False, *args, **kwargs):
+                 deref_mem=False, apply_simp=False, *args, **kwargs):
         """Instantiate a DiGraph
         @blocks: IR blocks
         """
@@ -146,7 +146,8 @@ class DiGraphDefUse(DiGraph):
 
         super(DiGraphDefUse, self).__init__(*args, **kwargs)
         self._compute_def_use(reaching_defs,
-                              deref_mem=deref_mem)
+                              deref_mem=deref_mem,
+                              apply_simp=apply_simp)
 
     def edge_attr(self, src, dst):
         """
@@ -157,18 +158,20 @@ class DiGraphDefUse(DiGraph):
         return self._edge_attr[(src, dst)]
 
     def _compute_def_use(self, reaching_defs,
-                         deref_mem=False):
+                         deref_mem=False, apply_simp=False):
         for block in viewvalues(self._blocks):
             self._compute_def_use_block(block,
                                         reaching_defs,
-                                        deref_mem=deref_mem)
+                                        deref_mem=deref_mem,
+                                        apply_simp=apply_simp)
 
-    def _compute_def_use_block(self, block, reaching_defs, deref_mem=False):
+    def _compute_def_use_block(self, block, reaching_defs, deref_mem=False, apply_simp=False):
         for index, assignblk in enumerate(block):
             assignblk_reaching_defs = reaching_defs.get_definitions(block.loc_key, index)
             for lval, expr in viewitems(assignblk):
                 self.add_node(AssignblkNode(block.loc_key, index, lval))
 
+                expr = expr_simp_explicit(expr) if apply_simp else expr
                 read_vars = expr.get_r(mem_read=deref_mem)
                 if deref_mem and lval.is_mem():
                     read_vars.update(lval.ptr.get_r(mem_read=deref_mem))
diff --git a/miasm/arch/arm/sem.py b/miasm/arch/arm/sem.py
index 7d72b956..027c3a6a 100644
--- a/miasm/arch/arm/sem.py
+++ b/miasm/arch/arm/sem.py
@@ -1752,6 +1752,9 @@ mnemo_condm0 = {'add': add,
                 'sdiv': sdiv,
                 'udiv': udiv,
 
+                'mrc': mrc,
+                'mcr': mcr,
+
                 'mul': mul,
                 'umull': umull,
                 'umlal': umlal,
@@ -1810,9 +1813,6 @@ mnemo_condm1 = {'adds': add,
                 'bics': bics,
                 'mvns': mvns,
 
-                'mrc': mrc,
-                'mcr': mcr,
-
                 'mrs': mrs,
                 'msr': msr,
 
diff --git a/miasm/os_dep/win_api_x86_32.py b/miasm/os_dep/win_api_x86_32.py
index 2dce96b8..d73b2c08 100644
--- a/miasm/os_dep/win_api_x86_32.py
+++ b/miasm/os_dep/win_api_x86_32.py
@@ -1966,6 +1966,7 @@ def ntdll_LdrLoadDll(jitter):
     libname = s.lower()
 
     ad = winobjs.runtime_dll.lib_get_add_base(libname)
+    log.info("Loading %r ret 0x%x", s, ad)
     jitter.vm.set_u32(args.modhandle, ad)
 
     jitter.func_ret_stdcall(ret_ad, 0)
diff --git a/test/arch/arm/arch.py b/test/arch/arm/arch.py
index 55b9a9c2..740655da 100644
--- a/test/arch/arm/arch.py
+++ b/test/arch/arm/arch.py
@@ -237,6 +237,11 @@ reg_tests_arm = [
      '110f11ee'),
     ('XXXXXXXX    MCR        p15, 0x0, R8, c2, c0, 0x0',
      '108f02ee'),
+    ('XXXXXXXX    MRCNE      p15, 0x0, R0, c1, c1, 0x0',
+     '110f111e'),
+    ('XXXXXXXX    MCRCC      p15, 0x0, R8, c2, c0, 0x1',
+     '308f023e'),
+
 
 ]
 ts = time.time()