diff options
| author | Ajax <commial@gmail.com> | 2016-06-29 08:24:29 +0200 |
|---|---|---|
| committer | Ajax <commial@gmail.com> | 2016-09-01 17:34:50 +0200 |
| commit | 48e3279683c16cb00d7c006b4716781a44d39798 (patch) | |
| tree | b846b261d63a428b5a48a0bf1d427b8c4abc6649 /miasm2/jitter/jitcore_python.py | |
| parent | 64e7bdcc046f4b5584443e01accd2206a73bf176 (diff) | |
| download | focaccia-miasm-48e3279683c16cb00d7c006b4716781a44d39798.tar.gz focaccia-miasm-48e3279683c16cb00d7c006b4716781a44d39798.zip | |
Handle CPU exception in Jitcore Python
This patch may affect performance, but this jitter is already slow (compared to others) and without it, the emulation is not correct
Diffstat (limited to 'miasm2/jitter/jitcore_python.py')
| -rw-r--r-- | miasm2/jitter/jitcore_python.py | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/miasm2/jitter/jitcore_python.py b/miasm2/jitter/jitcore_python.py index 70131157..87259f71 100644 --- a/miasm2/jitter/jitcore_python.py +++ b/miasm2/jitter/jitcore_python.py @@ -91,17 +91,18 @@ class JitCore_Python(jitcore.JitCore): if self.log_mn: print "%08x %s" % (line.offset, line) - # Check for memory exception - if (vmmngr.get_exception() != 0): + # Check for exception + if (vmmngr.get_exception() != 0 or + cpu.get_exception() != 0): exec_engine.update_cpu_from_engine() return line.offset # Eval current instruction (in IR) exec_engine.eval_ir(ir) - - # Check for memory exception which do not update PC - if (vmmngr.get_exception() & csts.EXCEPT_DO_NOT_UPDATE_PC != 0): - exec_engine.update_cpu_from_engine() + # Check for exceptions which do not update PC + exec_engine.update_cpu_from_engine() + if (vmmngr.get_exception() & csts.EXCEPT_DO_NOT_UPDATE_PC != 0 or + cpu.get_exception() > csts.EXCEPT_NUM_UPDT_EIP): return line.offset vmmngr.check_invalid_code_blocs() |