about summary refs log tree commit diff stats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/jitter/bad_block.py44
-rw-r--r--test/jitter/jmp_out_mem.py47
-rw-r--r--test/jitter/test_post_instr.py5
-rwxr-xr-xtest/test_all.py2
4 files changed, 94 insertions, 4 deletions
diff --git a/test/jitter/bad_block.py b/test/jitter/bad_block.py
new file mode 100644
index 00000000..04c1f475
--- /dev/null
+++ b/test/jitter/bad_block.py
@@ -0,0 +1,44 @@
+import sys
+from miasm2.jitter.csts import PAGE_READ, PAGE_WRITE, EXCEPT_UNK_MNEMO
+from miasm2.analysis.machine import Machine
+
+def code_sentinelle(jitter):
+    jitter.run = False
+    jitter.pc = 0
+    return True
+
+machine = Machine("x86_32")
+jitter = machine.jitter(sys.argv[1])
+
+jitter.init_stack()
+
+# nop
+# mov eax, 0x42
+# XX
+data = "90b842000000ffff90909090".decode('hex')
+
+# Will raise memory error at 0x40000006
+
+error_raised = False
+def raise_me(jitter):
+    global error_raised
+    error_raised = True
+    assert jitter.pc == 0x40000006
+    return False
+
+jitter.add_exception_handler(EXCEPT_UNK_MNEMO, raise_me)
+
+run_addr = 0x40000000
+
+jitter.vm.add_memory_page(run_addr, PAGE_READ | PAGE_WRITE, data)
+
+jitter.jit.log_regs = True
+jitter.jit.log_mn = True
+jitter.push_uint32_t(0x1337beef)
+
+jitter.add_breakpoint(0x1337beef, code_sentinelle)
+
+jitter.init_run(run_addr)
+jitter.continue_run()
+
+assert error_raised is True
diff --git a/test/jitter/jmp_out_mem.py b/test/jitter/jmp_out_mem.py
new file mode 100644
index 00000000..49da16ad
--- /dev/null
+++ b/test/jitter/jmp_out_mem.py
@@ -0,0 +1,47 @@
+import sys
+from miasm2.jitter.csts import PAGE_READ, PAGE_WRITE, EXCEPT_ACCESS_VIOL
+from miasm2.analysis.machine import Machine
+
+def code_sentinelle(jitter):
+    jitter.run = False
+    jitter.pc = 0
+    return True
+
+
+machine = Machine("x86_32")
+jitter = machine.jitter(sys.argv[1])
+
+jitter.init_stack()
+
+# nop
+# mov eax, 0x42
+# jmp 0x20
+
+data = "90b842000000eb20".decode('hex')
+
+# Will raise memory error at 0x40000028
+
+error_raised = False
+def raise_me(jitter):
+    global error_raised
+    error_raised = True
+    assert jitter.pc == 0x40000028
+    return False
+
+jitter.add_exception_handler(EXCEPT_ACCESS_VIOL, raise_me)
+
+
+run_addr = 0x40000000
+
+jitter.vm.add_memory_page(run_addr, PAGE_READ | PAGE_WRITE, data)
+
+jitter.jit.log_regs = True
+jitter.jit.log_mn = True
+jitter.push_uint32_t(0x1337beef)
+
+jitter.add_breakpoint(0x1337beef, code_sentinelle)
+
+jitter.init_run(run_addr)
+jitter.continue_run()
+
+assert error_raised is True
diff --git a/test/jitter/test_post_instr.py b/test/jitter/test_post_instr.py
index 3e68d58e..edf86645 100644
--- a/test/jitter/test_post_instr.py
+++ b/test/jitter/test_post_instr.py
@@ -1,6 +1,6 @@
+import sys
 from miasm2.analysis.machine import Machine
 from miasm2.jitter.csts import PAGE_READ, PAGE_WRITE, EXCEPT_BREAKPOINT_MEMORY, EXCEPT_ACCESS_VIOL
-import sys
 
 machine = Machine("x86_32")
 jitter = machine.jitter(sys.argv[1])
@@ -41,6 +41,3 @@ try:
     jitter.continue_run()
 except AssertionError:
     assert jitter.vm.get_exception() == EXCEPT_ACCESS_VIOL
-except RuntimeError:
-    assert sys.argv[1] == 'python'
-    assert jitter.vm.get_exception() == EXCEPT_ACCESS_VIOL
diff --git a/test/test_all.py b/test/test_all.py
index f9c90759..b1e36573 100755
--- a/test/test_all.py
+++ b/test/test_all.py
@@ -380,6 +380,8 @@ for script in ["jitload.py",
                "vm_mngr.py",
                "jit_options.py",
                "test_post_instr.py",
+               "bad_block.py",
+               "jmp_out_mem.py",
                ]:
     for engine in ArchUnitTest.jitter_engines:
         testset += RegressionTest([script, engine], base_dir="jitter",