miasm/ir/translators/miasm_ir.py
from builtins import map
from miasm.ir.translators.translator import Translator
class TranslatorMiasm(Translator):
"Translate a Miasm expression to its Python building form"
__LANG__ = "Miasm"
def from_ExprId(self, expr):
return "ExprId(%s, size=%d)" % (repr(expr.name), expr.size)
def from_ExprInt(self, expr):
return "ExprInt(0x%x, %d)" % (int(expr), expr.size)
def from_ExprCond(self, expr):
return "ExprCond(%s, %s, %s)" % (self.from_expr(expr.cond),
self.from_expr(expr.src1),
self.from_expr(expr.src2))
def from_ExprSlice(self, expr):
return "ExprSlice(%s, %d, %d)" % (self.from_expr(expr.arg),
expr.start,
expr.stop)
def from_ExprOp(self, expr):
return "ExprOp(%s, %s)" % (
repr(expr.op),
", ".join(map(self.from_expr, expr.args))
)
def from_ExprCompose(self, expr):
args = ["%s" % self.from_expr(arg) for arg in expr.args]
return "ExprCompose(%s)" % ", ".join(args)
def from_ExprAssign(self, expr):
return "ExprAssign(%s, %s)" % (self.from_expr(expr.dst),
self.from_expr(expr.src))
def from_ExprMem(self, expr):
return "ExprMem(%s, size=%d)" % (self.from_expr(expr.ptr), expr.size)
# Register the class
Translator.register(TranslatorMiasm)