about summary refs log tree commit diff stats
path: root/miasm/arch/ppc/arch.py
diff options
context:
space:
mode:
Diffstat (limited to 'miasm/arch/ppc/arch.py')
-rw-r--r--miasm/arch/ppc/arch.py23
1 files changed, 23 insertions, 0 deletions
diff --git a/miasm/arch/ppc/arch.py b/miasm/arch/ppc/arch.py
index 41259180..d4edc58e 100644
--- a/miasm/arch/ppc/arch.py
+++ b/miasm/arch/ppc/arch.py
@@ -9,6 +9,7 @@ from miasm.core.bin_stream import bin_stream
 import miasm.arch.ppc.regs as regs_module
 from miasm.arch.ppc.regs import *
 from miasm.core.asm_ast import AstInt, AstId, AstMem, AstOp
+from miasm.ir.ir import color_expr_html
 
 log = logging.getLogger("ppcdis")
 console_handler = logging.StreamHandler()
@@ -94,6 +95,28 @@ class instruction_ppc(instruction):
 
         return str(e)
 
+
+    @staticmethod
+    def arg2html(e, pos = None, loc_db=None):
+        if isinstance(e, ExprId) or isinstance(e, ExprInt) or isinstance(e, ExprLoc):
+            return color_expr_html(e, loc_db)
+        elif isinstance(e, ExprMem):
+            addr = e.ptr
+            if isinstance(addr, ExprInt) or isinstance(addr, ExprId):
+                out = '(%s)'%color_expr_html(addr, loc_db)
+            elif isinstance(addr, ExprOp):
+                if len(addr.args) == 1:
+                    out = '(%s)'%color_expr_html(addr, loc_db)
+                elif len(addr.args) == 2:
+                    out = '%s(%s)'%(color_expr_html(addr.args[1], loc_db), color_expr_html(addr.args[0], loc_db))
+                else:
+                    raise NotImplementedError('More than two args to ExprOp of address')
+            else:
+                raise NotImplementedError('Invalid memory expression')
+            return out
+
+        return color_expr_html(e, loc_db)
+
     @staticmethod
     def is_conditional_jump(s):
         return (s[0] == 'B' and