about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorWilliam Bruneau <william.bruneau@epfedu.fr>2021-02-18 17:40:35 +0100
committerWilliam Bruneau <william.bruneau@epfedu.fr>2021-02-24 18:30:14 +0100
commitc87e64b5784654419530da936dfb985c5ecb1416 (patch)
treef78af4d857fcb9c0d3298c49128e2797c2322546
parent87061c1045c8a66332aca9e5b5b928b79dd326ce (diff)
downloadmiasm-c87e64b5784654419530da936dfb985c5ecb1416.tar.gz
miasm-c87e64b5784654419530da936dfb985c5ecb1416.zip
Pretty print jitter exception flag
-rw-r--r--miasm/jitter/csts.py18
-rw-r--r--miasm/jitter/jitload.py11
2 files changed, 28 insertions, 1 deletions
diff --git a/miasm/jitter/csts.py b/miasm/jitter/csts.py
index 3829ed98..f40cbe74 100644
--- a/miasm/jitter/csts.py
+++ b/miasm/jitter/csts.py
@@ -21,6 +21,24 @@ EXCEPT_ILLEGAL_INSN = ((1 << 18) | EXCEPT_DO_NOT_UPDATE_PC)
 EXCEPT_UNK_MNEMO = ((1 << 19) | EXCEPT_DO_NOT_UPDATE_PC)
 EXCEPT_INT_1 = ((1 << 20) | EXCEPT_DO_NOT_UPDATE_PC)
 
+JitterExceptions = {
+    "DO_NOT_UPDATE_PC": EXCEPT_DO_NOT_UPDATE_PC,
+    "NUM_UPDT_EIP": EXCEPT_NUM_UPDT_EIP,
+    "CODE_AUTOMOD": EXCEPT_CODE_AUTOMOD,
+    "SOFT_BP": EXCEPT_SOFT_BP,
+    "INT_XX": EXCEPT_INT_XX,
+    "SPR_ACCESS": EXCEPT_SPR_ACCESS,
+    "SYSCALL": EXCEPT_SYSCALL,
+    "BREAKPOINT_MEMORY": EXCEPT_BREAKPOINT_MEMORY,
+    "BREAKPOINT_INTERN": EXCEPT_BREAKPOINT_INTERN,
+    "ACCESS_VIOL": EXCEPT_ACCESS_VIOL,
+    "DIV_BY_ZERO": EXCEPT_DIV_BY_ZERO,
+    "PRIV_INSN": EXCEPT_PRIV_INSN,
+    "ILLEGAL_INSN": EXCEPT_ILLEGAL_INSN,
+    "UNK_MNEMO": EXCEPT_UNK_MNEMO,
+    "INT_1": EXCEPT_INT_1,
+}
+
 # VM Mngr constants
 
 PAGE_READ = 1
diff --git a/miasm/jitter/jitload.py b/miasm/jitter/jitload.py
index 49c74254..34c4d157 100644
--- a/miasm/jitter/jitload.py
+++ b/miasm/jitter/jitload.py
@@ -182,7 +182,16 @@ class JitterException(Exception):
         self.exception_flag = exception_flag
 
     def __str__(self):
-        return "A jitter exception occurred (0x%x)" % (self.exception_flag)
+        return "A jitter exception occurred: %s (0x%x)" % (
+            self.exception_flag_to_str(), self.exception_flag
+        )
+
+    def exception_flag_to_str(self):
+        exception_flag_list = []
+        for name, value in JitterExceptions.items():
+            if value & self.exception_flag == value:
+                exception_flag_list.append(name)
+        return ' & '.join(exception_flag_list)
 
 
 class Jitter(object):