diff options
| author | Camille Mougey <camille.mougey@cea.fr> | 2014-12-16 17:47:21 +0100 |
|---|---|---|
| committer | Camille Mougey <camille.mougey@cea.fr> | 2014-12-16 17:47:21 +0100 |
| commit | df0738328cbab62fd9c27a451079de6a73ef914e (patch) | |
| tree | a0caa1b0fb8b6ef663c80d121a91055a532809d0 | |
| parent | 68ef4936f35c50a85b318f1f569f67089a1f7c82 (diff) | |
| download | miasm-df0738328cbab62fd9c27a451079de6a73ef914e.tar.gz miasm-df0738328cbab62fd9c27a451079de6a73ef914e.zip | |
IR/Translators: Introduce Miasm translator, to get an IR building expression
| -rw-r--r-- | miasm2/ir/translators/__init__.py | 1 | ||||
| -rw-r--r-- | miasm2/ir/translators/miasm.py | 51 |
2 files changed, 52 insertions, 0 deletions
diff --git a/miasm2/ir/translators/__init__.py b/miasm2/ir/translators/__init__.py index 0d768b57..443ba463 100644 --- a/miasm2/ir/translators/__init__.py +++ b/miasm2/ir/translators/__init__.py @@ -1,5 +1,6 @@ """IR Translators""" from miasm2.ir.translators.C import * from miasm2.ir.translators.python import * +from miasm2.ir.translators.miasm import * __all__ = ["Translator"] diff --git a/miasm2/ir/translators/miasm.py b/miasm2/ir/translators/miasm.py new file mode 100644 index 00000000..8f61fa96 --- /dev/null +++ b/miasm2/ir/translators/miasm.py @@ -0,0 +1,51 @@ +from miasm2.ir.translators.translator import Translator + + +class TranslatorMiasm(Translator): + "Translate a Miasm expression to its Python building form" + + __LANG__ = "Miasm" + + @classmethod + def from_ExprId(cls, expr): + return "ExprId(%s, size=%d)" % (repr(expr.name), expr.size) + + @classmethod + def from_ExprInt(cls, expr): + return "ExprInt_fromsize(%d, 0x%x)" % (expr.size, int(expr.arg)) + + @classmethod + def from_ExprCond(cls, expr): + return "ExprCond(%s, %s, %s)" % (cls.from_expr(expr.cond), + cls.from_expr(expr.src1), + cls.from_expr(expr.src2)) + + @classmethod + def from_ExprSlice(cls, expr): + return "ExprSlice(%s, %d, %d)" % (cls.from_expr(expr.arg), + expr.start, + expr.stop) + + @classmethod + def from_ExprOp(cls, expr): + return "ExprOp(%s, %s)" % (repr(expr.op), + ", ".join(map(cls.from_expr, expr.args))) + + @classmethod + def from_ExprCompose(cls, expr): + args = ["(%s, %d, %d)" % (cls.from_expr(arg), start, stop) + for arg, start, stop in expr.args] + return "ExprCompose([%s])" % ", ".join(args) + + @classmethod + def from_ExprAff(cls, expr): + return "ExprAff(%s, %s)" % (cls.from_expr(expr.dst), + cls.from_expr(expr.src)) + + @classmethod + def from_ExprMem(cls, expr): + return "ExprMem(%s, size=%d)" % (cls.from_expr(expr.arg), expr.size) + + +# Register the class +Translator.register(TranslatorMiasm) |