diff options
Diffstat (limited to 'miasm2/ir/translators')
| -rw-r--r-- | miasm2/ir/translators/C.py | 3 | ||||
| -rw-r--r-- | miasm2/ir/translators/smt2.py | 17 | ||||
| -rw-r--r-- | miasm2/ir/translators/z3_ir.py | 22 |
3 files changed, 14 insertions, 28 deletions
diff --git a/miasm2/ir/translators/C.py b/miasm2/ir/translators/C.py index a8e3a254..2f354d47 100644 --- a/miasm2/ir/translators/C.py +++ b/miasm2/ir/translators/C.py @@ -39,8 +39,6 @@ class TranslatorC(Translator): return "0x%x" % mask def from_ExprId(self, expr): - if isinstance(expr.name, asmblock.AsmLabel): - return "0x%x" % expr.name.offset return str(expr) def from_ExprInt(self, expr): @@ -56,6 +54,7 @@ class TranslatorC(Translator): loc_key = expr.loc_key if self.symbol_pool is None: return str(loc_key) + offset = self.symbol_pool.loc_key_to_offset(loc_key) name = self.symbol_pool.loc_key_to_name(loc_key) diff --git a/miasm2/ir/translators/smt2.py b/miasm2/ir/translators/smt2.py index 6a6fec16..f5d633e0 100644 --- a/miasm2/ir/translators/smt2.py +++ b/miasm2/ir/translators/smt2.py @@ -1,7 +1,6 @@ import logging import operator -from miasm2.core.asmblock import AsmLabel from miasm2.ir.translators.translator import Translator from miasm2.expression.smt2_helper import * @@ -136,19 +135,9 @@ class TranslatorSMT2(Translator): return bit_vec_val(expr.arg.arg, expr.size) def from_ExprId(self, expr): - if isinstance(expr.name, AsmLabel): - if expr.name.offset is not None: - return bit_vec_val(str(expr.name.offset), expr.size) - else: - # SMT2-escape expression name - name = "|{}|".format(str(expr.name)) - if name not in self._bitvectors: - self._bitvectors[name] = expr.size - return name - else: - if str(expr) not in self._bitvectors: - self._bitvectors[str(expr)] = expr.size - return str(expr) + if str(expr) not in self._bitvectors: + self._bitvectors[str(expr)] = expr.size + return str(expr) def from_ExprLoc(self, expr): loc_key = expr.loc_key diff --git a/miasm2/ir/translators/z3_ir.py b/miasm2/ir/translators/z3_ir.py index 544dd26f..d01b73fa 100644 --- a/miasm2/ir/translators/z3_ir.py +++ b/miasm2/ir/translators/z3_ir.py @@ -5,7 +5,6 @@ import operator # Raise an ImportError if z3 is not available WITHOUT actually importing it imp.find_module("z3") -from miasm2.core.asmblock import AsmLabel from miasm2.ir.translators.translator import Translator log = logging.getLogger("translator_z3") @@ -133,22 +132,21 @@ class TranslatorZ3(Translator): return z3.BitVecVal(expr.arg.arg, expr.size) def from_ExprId(self, expr): - if isinstance(expr.name, AsmLabel) and expr.name.offset is not None: - return z3.BitVecVal(expr.name.offset, expr.size) - else: - return z3.BitVec(str(expr), expr.size) + return z3.BitVec(str(expr), expr.size) def from_ExprLoc(self, expr): if self.symbol_pool is None: # No symbol_pool, fallback to default name return z3.BitVec(str(expr), expr.size) - label = self.symbol_pool.loc_key_to_label(expr.loc_key) - if label is None: - # No symbol_pool, fallback to default name - return z3.BitVec(str(expr), expr.size) - elif label.offset is None: - return z3.BitVec(label.name, expr.size) - return z3.BitVecVal(label.offset, expr.size) + loc_key = expr.loc_key + offset = self.symbol_pool.loc_key_to_offset(loc_key) + name = self.symbol_pool.loc_key_to_name(loc_key) + if offset is not None: + return z3.BitVecVal(offset, expr.size) + if name is not None: + return z3.BitVec(name, expr.size) + # fallback to default name + return z3.BitVec(str(loc_key), expr.size) def from_ExprMem(self, expr): addr = self.from_expr(expr.arg) |