diff options
| author | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2020-11-30 17:44:57 +0100 |
|---|---|---|
| committer | Fabrice Desclaux <fabrice.desclaux@cea.fr> | 2020-12-01 09:43:09 +0100 |
| commit | f6804c42ec258ba0d53a41cb6deed5eb11eb7eca (patch) | |
| tree | 099bcf8293b4b4e710c4dc9601d1eed0b64d5023 | |
| parent | 340429eb41295515203c32188430bcba7f0481dd (diff) | |
| download | miasm-f6804c42ec258ba0d53a41cb6deed5eb11eb7eca.tar.gz miasm-f6804c42ec258ba0d53a41cb6deed5eb11eb7eca.zip | |
Add missing == operator in translators
| -rw-r--r-- | example/expression/expr_translate.py | 11 | ||||
| -rw-r--r-- | miasm/ir/translators/python.py | 5 | ||||
| -rw-r--r-- | miasm/ir/translators/smt2.py | 4 |
3 files changed, 20 insertions, 0 deletions
diff --git a/example/expression/expr_translate.py b/example/expression/expr_translate.py index 8562975f..31408566 100644 --- a/example/expression/expr_translate.py +++ b/example/expression/expr_translate.py @@ -45,3 +45,14 @@ print("-> 0x%x" % eval(target_exprs["Python"])) print("[+] Validate the Miasm syntax rebuilding") exprRebuild = eval(target_exprs["Miasm"]) assert(expr == exprRebuild) + + +a = ExprId("a", 32) +b = ExprId("b", 32) +cst1 = ExprInt(1, 32) +eq_test = ExprOp("==", a, b + cst1) + +for lang in Translator.available_languages(): + translator = Translator.to_language(lang) + print("Translate to %s:" % lang) + print(translator.from_expr(eq_test)) diff --git a/miasm/ir/translators/python.py b/miasm/ir/translators/python.py index 0da2318d..4e5cc5e1 100644 --- a/miasm/ir/translators/python.py +++ b/miasm/ir/translators/python.py @@ -1,6 +1,7 @@ from builtins import map from miasm.expression.expression import ExprInt from miasm.ir.translators.translator import Translator +from miasm.expression.expression import ExprCond, ExprInt class TranslatorPython(Translator): @@ -71,6 +72,10 @@ class TranslatorPython(Translator): ) elif expr.op == "parity": return "(%s & 0x1)" % self.from_expr(expr.args[0]) + elif expr.op == "==": + return self.from_expr( + ExprCond(expr.args[0] - expr.args[1], ExprInt(0, 1), ExprInt(1, 1)) + ) elif expr.op in ["<<<", ">>>"]: amount_raw = expr.args[1] diff --git a/miasm/ir/translators/smt2.py b/miasm/ir/translators/smt2.py index c4260eb4..d3366b8b 100644 --- a/miasm/ir/translators/smt2.py +++ b/miasm/ir/translators/smt2.py @@ -4,6 +4,8 @@ import logging from miasm.ir.translators.translator import Translator from miasm.expression.smt2_helper import * +from miasm.expression.expression import ExprCond, ExprInt + log = logging.getLogger("translator_smt2") console_handler = logging.StreamHandler() @@ -226,6 +228,8 @@ class TranslatorSMT2(Translator): res = bv_rotate_left(res, arg, expr.size) elif expr.op == ">>>": res = bv_rotate_right(res, arg, expr.size) + elif expr.op == "==": + res = self.from_expr(ExprCond(expr.args[0] - expr.args[1], ExprInt(0, 1), ExprInt(1, 1))) else: raise NotImplementedError("Unsupported OP yet: %s" % expr.op) elif expr.op == 'parity': |