Add missing == operator in translators

This commit is contained in:
Fabrice Desclaux 2020-11-30 17:44:57 +01:00
parent 340429eb41
commit f6804c42ec
3 changed files with 20 additions and 0 deletions

View file

@ -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))

View file

@ -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]

View file

@ -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':