about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorFabrice Desclaux <fabrice.desclaux@cea.fr>2020-11-30 17:44:57 +0100
committerFabrice Desclaux <fabrice.desclaux@cea.fr>2020-12-01 09:43:09 +0100
commitf6804c42ec258ba0d53a41cb6deed5eb11eb7eca (patch)
tree099bcf8293b4b4e710c4dc9601d1eed0b64d5023
parent340429eb41295515203c32188430bcba7f0481dd (diff)
downloadmiasm-f6804c42ec258ba0d53a41cb6deed5eb11eb7eca.tar.gz
miasm-f6804c42ec258ba0d53a41cb6deed5eb11eb7eca.zip
Add missing == operator in translators
-rw-r--r--example/expression/expr_translate.py11
-rw-r--r--miasm/ir/translators/python.py5
-rw-r--r--miasm/ir/translators/smt2.py4
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':