diff options
| author | Camille Mougey <commial@gmail.com> | 2017-06-06 12:24:31 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-06-06 12:24:31 +0200 |
| commit | 443a811aa92a31d3c2ae89937c5abb497bcc30ff (patch) | |
| tree | 70937e30d5475f1c0b137ffc343e312323c50970 /miasm2/core | |
| parent | b772f2d9c7aceb7d1ca87cdefd708d4f65d71623 (diff) | |
| parent | ded504718e83ffcc63ef42cc27159ef998ed211b (diff) | |
| download | miasm-443a811aa92a31d3c2ae89937c5abb497bcc30ff.tar.gz miasm-443a811aa92a31d3c2ae89937c5abb497bcc30ff.zip | |
Merge pull request #522 from serpilliere/ir_ro
Ir ro
Diffstat (limited to 'miasm2/core')
| -rw-r--r-- | miasm2/core/asmblock.py | 2 | ||||
| -rw-r--r-- | miasm2/core/sembuilder.py | 24 |
2 files changed, 19 insertions, 7 deletions
diff --git a/miasm2/core/asmblock.py b/miasm2/core/asmblock.py index 72f259f9..965b22c4 100644 --- a/miasm2/core/asmblock.py +++ b/miasm2/core/asmblock.py @@ -45,7 +45,7 @@ class AsmLabel(object): self.name = name self.attrib = None if offset is None: - self.offset = offset + self.offset = None else: self.offset = int(offset) diff --git a/miasm2/core/sembuilder.py b/miasm2/core/sembuilder.py index 138e4552..8d6d3e07 100644 --- a/miasm2/core/sembuilder.py +++ b/miasm2/core/sembuilder.py @@ -5,7 +5,7 @@ import ast import re import miasm2.expression.expression as m2_expr -from miasm2.ir.ir import IRBlock +from miasm2.ir.ir import IRBlock, AssignBlock class MiasmTransformer(ast.NodeTransformer): @@ -127,6 +127,7 @@ class SemBuilder(object): self.transformer = MiasmTransformer() self._ctx = dict(m2_expr.__dict__) self._ctx["IRBlock"] = IRBlock + self._ctx["AssignBlock"] = AssignBlock self._functions = {} # Update context @@ -246,20 +247,31 @@ class SemBuilder(object): starargs=None, kwargs=None) sub_blocks[-1][-1].append(jmp_end) - sub_blocks[-1][-1] = ast.List(elts=sub_blocks[-1][-1], - ctx=ast.Load()) - sub_blocks[-1] = ast.List(elts=sub_blocks[-1], - ctx=ast.Load()) + + + instr = ast.Name(id='instr', ctx=ast.Load()) + effects = ast.List(elts=sub_blocks[-1][-1], + ctx=ast.Load()) + assignblk = ast.Call(func=ast.Name(id='AssignBlock', + ctx=ast.Load()), + args=[effects, instr], + keywords=[], + starargs=None, + kwargs=None) + ## Replace the block with a call to 'IRBlock' lbl_if_name = ast.Attribute(value=ast.Name(id=lbl_name, ctx=ast.Load()), attr='name', ctx=ast.Load()) + assignblks = ast.List(elts=[assignblk], + ctx=ast.Load()) + sub_blocks[-1] = ast.Call(func=ast.Name(id='IRBlock', ctx=ast.Load()), args=[lbl_if_name, - sub_blocks[-1]], + assignblks], keywords=[], starargs=None, kwargs=None) |