about summary refs log tree commit diff stats
path: root/example/jitter/x86_32.py
diff options
context:
space:
mode:
Diffstat (limited to 'example/jitter/x86_32.py')
-rw-r--r--example/jitter/x86_32.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/example/jitter/x86_32.py b/example/jitter/x86_32.py
new file mode 100644
index 00000000..1b2aa012
--- /dev/null
+++ b/example/jitter/x86_32.py
@@ -0,0 +1,41 @@
+import os
+from argparse import ArgumentParser
+from miasm2.jitter.csts import PAGE_READ, PAGE_WRITE
+from miasm2.analysis.machine import Machine
+
+from pdb import pm
+
+
+filename = os.environ.get('PYTHONSTARTUP')
+if filename and os.path.isfile(filename):
+    execfile(filename)
+
+parser = ArgumentParser(description="x86 32 basic Jitter")
+parser.add_argument("filename", help="x86 32 shellcode filename")
+parser.add_argument("-j", "--jitter",
+                    help="Jitter engine. Possible values are : tcc (default), llvm",
+                    default="tcc")
+args = parser.parse_args()
+
+def code_sentinelle(jitter):
+    jitter.run = False
+    jitter.pc = 0
+    return True
+
+
+myjit = Machine("x86_32").jitter(args.jitter)
+myjit.init_stack()
+
+data = open(args.filename).read()
+run_addr = 0x40000000
+myjit.vm.add_memory_page(run_addr, PAGE_READ | PAGE_WRITE, data)
+
+myjit.jit.log_regs = True
+myjit.jit.log_mn = True
+myjit.push_uint32_t(0x1337beef)
+
+myjit.add_breakpoint(0x1337beef, code_sentinelle)
+
+myjit.init_run(run_addr)
+myjit.continue_run()
+del(myjit)