diff options
| author | serpilliere <fabrice.desclaux@cea.fr> | 2015-02-21 21:09:07 +0100 |
|---|---|---|
| committer | serpilliere <fabrice.desclaux@cea.fr> | 2015-02-22 01:48:27 +0100 |
| commit | dd2da246f676ff827201c9eee3ae698081875bf7 (patch) | |
| tree | 92f0b1839ac0398426ad0332cd973cf9b41ca8c9 | |
| parent | f26427471fb9cda89b36b1d2609a9f58f1d79d68 (diff) | |
| download | miasm-dd2da246f676ff827201c9eee3ae698081875bf7.tar.gz miasm-dd2da246f676ff827201c9eee3ae698081875bf7.zip | |
Expression: remove code which uses expression modifications
| -rw-r--r-- | example/ida/depgraph.py | 6 | ||||
| -rw-r--r-- | example/ida/graph_ir.py | 4 | ||||
| -rw-r--r-- | miasm2/expression/expression_helper.py | 6 | ||||
| -rw-r--r-- | miasm2/ir/ir.py | 9 | ||||
| -rw-r--r-- | miasm2/ir/translators/C.py | 2 |
5 files changed, 15 insertions, 12 deletions
diff --git a/example/ida/depgraph.py b/example/ida/depgraph.py index 65a3c88f..33aaa6cb 100644 --- a/example/ida/depgraph.py +++ b/example/ida/depgraph.py @@ -3,6 +3,8 @@ import sys from idaapi import GraphViewer from miasm2.core.bin_stream_ida import bin_stream_ida from miasm2.core.asmbloc import * +from miasm2.expression import expression as m2_expr + from miasm2.expression.simplifications import expr_simp from miasm2.analysis.machine import Machine from miasm2.analysis.depgraph import DependencyGraph, DependencyGraph_NoMemory @@ -133,8 +135,8 @@ for bloc in blocs: # Simplify affectations for irb in ir_arch.blocs.values(): for irs in irb.irs: - for i, e in enumerate(irs): - e.dst, e.src = expr_simp(e.dst), expr_simp(e.src) + for i, expr in enumerate(irs): + irs[i] = m2_expr.ExprAff(expr_simp(expr.dst), expr_simp(expr.src)) # Build the IRA Graph ir_arch.gen_graph() diff --git a/example/ida/graph_ir.py b/example/ida/graph_ir.py index a1db6cbd..3a936e37 100644 --- a/example/ida/graph_ir.py +++ b/example/ida/graph_ir.py @@ -139,8 +139,8 @@ print "IR ok... %x" % ad for irb in ir_arch.blocs.values(): for irs in irb.irs: - for i, e in enumerate(irs): - e.dst, e.src = expr_simp(e.dst), expr_simp(e.src) + for i, expr in enumerate(irs): + irs[i] = ExprAff(expr_simp(expr.dst), expr_simp(expr.src)) ir_arch.gen_graph() out = ir_arch.graph() diff --git a/miasm2/expression/expression_helper.py b/miasm2/expression/expression_helper.py index 825cad60..3555530a 100644 --- a/miasm2/expression/expression_helper.py +++ b/miasm2/expression/expression_helper.py @@ -64,9 +64,11 @@ def merge_sliceto_slice(args): final_sources = [] sorted_s = [] for x in sources_int.values(): + x = list(x) # mask int v = x[0].arg & ((1 << (x[2] - x[1])) - 1) - x[0].arg = v + x[0] = m2_expr.ExprInt_from(x[0], v) + x = tuple(x) sorted_s.append((x[1], x)) sorted_s.sort() while sorted_s: @@ -81,7 +83,7 @@ def merge_sliceto_slice(args): a = m2_expr.mod_size2uint[size]( (int(out[0].arg) << (out[1] - s_start)) + int(sorted_s[-1][1][0].arg)) - out[0].arg = a + out[0] = m2_expr.ExprInt(a) sorted_s.pop() out[1] = s_start out[0] = m2_expr.ExprInt_fromsize(size, out[0].arg) diff --git a/miasm2/ir/ir.py b/miasm2/ir/ir.py index 73a38242..3a8cbb14 100644 --- a/miasm2/ir/ir.py +++ b/miasm2/ir/ir.py @@ -55,12 +55,12 @@ class irbloc(object): """Find and replace the IRDst affectation's source by @value""" dst = None for ir in self.irs: - for i in ir: - if isinstance(i.dst, m2_expr.ExprId) and i.dst.name == "IRDst": + for i, expr in enumerate(ir): + if isinstance(expr.dst, m2_expr.ExprId) and expr.dst.name == "IRDst": if dst is not None: raise ValueError('Multiple destinations!') dst = value - i.src = value + ir[i] = m2_expr.ExprAff(expr.dst, value) self._dst = value dst = property(get_dst, set_dst) @@ -296,8 +296,7 @@ class ir(object): for b in self.blocs.values(): for ir in b.irs: for i, r in enumerate(ir): - ir[i].src = expr_simp(r.src) - ir[i].dst = expr_simp(r.dst) + ir[i] = m2_expr.ExprAff(expr_simp(r.dst), expr_simp(r.src)) def replace_expr_in_ir(self, bloc, rep): for irs in bloc.irs: diff --git a/miasm2/ir/translators/C.py b/miasm2/ir/translators/C.py index 007f8378..feb7539b 100644 --- a/miasm2/ir/translators/C.py +++ b/miasm2/ir/translators/C.py @@ -50,7 +50,7 @@ class TranslatorC(Translator): @classmethod def from_ExprMem(cls, expr): - return "MEM_LOOKUP_%.2d(vm_mngr, %s)" % (expr._size, + return "MEM_LOOKUP_%.2d(vm_mngr, %s)" % (expr.size, cls.from_expr(expr.arg)) @classmethod |