about summary refs log tree commit diff stats
path: root/src/miasm/ir/translators/miasm_ir.py
diff options
context:
space:
mode:
authorTheofilos Augoustis <theofilos.augoustis@gmail.com>2025-10-14 09:09:29 +0000
committerTheofilos Augoustis <theofilos.augoustis@gmail.com>2025-10-14 09:09:29 +0000
commit579cf1d03fb932083e6317967d1613d5c2587fb6 (patch)
tree629f039935382a2a7391bce9253f6c9968159049 /src/miasm/ir/translators/miasm_ir.py
parent51c15d3ea2e16d4fc5f0f01a3b9befc66b1f982e (diff)
downloadfocaccia-miasm-ta/nix.tar.gz
focaccia-miasm-ta/nix.zip
Convert to src-layout ta/nix
Diffstat (limited to 'src/miasm/ir/translators/miasm_ir.py')
-rw-r--r--src/miasm/ir/translators/miasm_ir.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/miasm/ir/translators/miasm_ir.py b/src/miasm/ir/translators/miasm_ir.py
new file mode 100644
index 00000000..a460d446
--- /dev/null
+++ b/src/miasm/ir/translators/miasm_ir.py
@@ -0,0 +1,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)