about summary refs log tree commit diff stats
path: root/src/miasm/ir/translators/miasm_ir.py
blob: a460d446eb6a083aebd09d10a350b8101b5beb01 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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)