about summary refs log tree commit diff stats
path: root/example
diff options
context:
space:
mode:
authorFabrice Desclaux <fabrice.desclaux@cea.fr>2017-05-07 20:10:38 +0200
committerFabrice Desclaux <fabrice.desclaux@cea.fr>2017-05-24 12:23:20 +0200
commit11d55f727529de9bbdf88f776584b3cbb7667c20 (patch)
treef36e8c5fd1baca6ec60b937c3eba068d74d96aa1 /example
parentd3e5587207f68763ea483c0deeef160b3ebec155 (diff)
downloadfocaccia-miasm-11d55f727529de9bbdf88f776584b3cbb7667c20.tar.gz
focaccia-miasm-11d55f727529de9bbdf88f776584b3cbb7667c20.zip
IR: Make IRBlock immutable
Diffstat (limited to 'example')
-rw-r--r--example/ida/depgraph.py10
-rw-r--r--example/ida/graph_ir.py8
2 files changed, 11 insertions, 7 deletions
diff --git a/example/ida/depgraph.py b/example/ida/depgraph.py
index cbd0cf0f..ab033e15 100644
--- a/example/ida/depgraph.py
+++ b/example/ida/depgraph.py
@@ -7,7 +7,7 @@ from miasm2.expression import expression as m2_expr
 
 from miasm2.expression.simplifications import expr_simp
 from miasm2.analysis.depgraph import DependencyGraph
-from miasm2.ir.ir import AssignBlock
+from miasm2.ir.ir import AssignBlock, IRBlock
 
 from utils import guess_machine
 
@@ -173,10 +173,11 @@ settings.Execute()
 label, elements, line_nb = settings.label, settings.elements, settings.line_nb
 # Simplify affectations
 for irb in ir_arch.blocks.values():
+    irs = []
     fix_stack = irb.label.offset is not None and settings.unalias_stack
-    for i, assignblk in enumerate(irb.irs):
+    for assignblk in irb.irs:
         if fix_stack:
-            stk_high = m2_expr.ExprInt(GetSpd(irb.irs[i].instr.offset), ir_arch.sp.size)
+            stk_high = m2_expr.ExprInt(GetSpd(assignblk.instr.offset), ir_arch.sp.size)
             fix_dct = {ir_arch.sp: mn.regs.regs_init[ir_arch.sp] + stk_high}
 
         new_assignblk = {}
@@ -187,7 +188,8 @@ for irb in ir_arch.blocks.values():
                     dst = dst.replace_expr(fix_dct)
             dst, src = expr_simp(dst), expr_simp(src)
             new_assignblk[dst] = src
-        irb.irs[i] = AssignBlock(new_assignblk, instr=assignblk.instr)
+        irs.append(AssignBlock(new_assignblk, instr=assignblk.instr))
+    ir_arch.blocks[irb.label] = IRBlock(irb.label, irs)
 
 # Get dependency graphs
 dg = settings.depgraph
diff --git a/example/ida/graph_ir.py b/example/ida/graph_ir.py
index 6ff4304a..bb06fd0b 100644
--- a/example/ida/graph_ir.py
+++ b/example/ida/graph_ir.py
@@ -11,7 +11,7 @@ from miasm2.expression.expression import *
 from miasm2.analysis.data_analysis import inter_bloc_flow, \
     intra_bloc_flow_symbexec
 from miasm2.analysis.data_flow import dead_simp
-from miasm2.ir.ir import AssignBlock
+from miasm2.ir.ir import AssignBlock, IRBlock
 
 from utils import guess_machine, expr2colorstr
 
@@ -136,12 +136,14 @@ for block in ab:
 print "IR ok... %x" % ad
 
 for irb in ir_arch.blocks.itervalues():
-    for i, assignblk in enumerate(irb.irs):
+    irs = []
+    for assignblk in irb.irs:
         new_assignblk = {
             expr_simp(dst): expr_simp(src)
             for dst, src in assignblk.iteritems()
         }
-        irb.irs[i] = AssignBlock(new_assignblk, instr=assignblk.instr)
+        irs.append(AssignBlock(new_assignblk, instr=assignblk.instr))
+    ir_arch.blocks[irb.label] = IRBlock(irb.label, irs)
 
 out = ir_arch.graph.dot()
 open(os.path.join(tempfile.gettempdir(), 'graph.dot'), 'wb').write(out)