about summary refs log tree commit diff stats
path: root/example
diff options
context:
space:
mode:
authorserpilliere <devnull@localhost>2011-08-26 13:34:12 +0200
committerserpilliere <devnull@localhost>2011-08-26 13:34:12 +0200
commitbbd7e71ada55e23fe857a7c9954687ff987dec7c (patch)
tree5b8b21abab228129b8b2db1fab465185d27e4416 /example
parent78bacd4d0dd014412a81ce8dc72ad3954bcd12e5 (diff)
downloadmiasm-bbd7e71ada55e23fe857a7c9954687ff987dec7c.tar.gz
miasm-bbd7e71ada55e23fe857a7c9954687ff987dec7c.zip
explicit error whil vm_get_mem fails
Diffstat (limited to 'example')
-rwxr-xr-xexample/emulx86_bin.py75
-rw-r--r--example/x86_sc.binbin0 -> 16 bytes
2 files changed, 75 insertions, 0 deletions
diff --git a/example/emulx86_bin.py b/example/emulx86_bin.py
new file mode 100755
index 00000000..151370b4
--- /dev/null
+++ b/example/emulx86_bin.py
@@ -0,0 +1,75 @@
+#! /usr/bin/env python
+import os
+from elfesteem import *
+from miasm.core import asmbloc
+from miasm.core import parse_asm
+from miasm.tools.to_c_helper import *
+from miasm.tools import emul_helper
+from miasm.arch.ia32_arch import *
+import sys
+
+
+
+if len(sys.argv) <3:
+    print 'usage:'
+    print "%s rawfile address_to_exec"%sys.argv[0]
+    sys.exit(0)
+data = open(sys.argv[1], 'rb').read()
+ad = sys.argv[2].lower()
+if ad.startswith('0x'):
+    ad = int(ad, 16)
+else:
+    ad = int(ad)
+
+
+vm_init_regs()
+init_memory_page_pool_py()
+init_code_bloc_pool_py()
+in_str = bin_stream_vm()
+
+codenat_tcc_init()
+
+code_ad = 0x40000000
+vm_add_memory_page(code_ad, PAGE_READ|PAGE_WRITE|PAGE_EXEC, data)
+stack_base_ad = 0x1230000
+stack_size = 0x10000
+vm_add_memory_page(stack_base_ad, PAGE_READ|PAGE_WRITE, "\x00"*stack_size)
+dump_memory_page_pool_py()
+
+regs = vm_get_gpreg()
+regs['esp'] = stack_base_ad+stack_size
+vm_set_gpreg(regs)
+dump_gpregs_py()
+
+
+vm_push_uint32_t(0x1337beef)
+symbol_pool = asmbloc.asm_symbol_pool()
+known_blocs = {}
+code_blocs_mem_range = []
+
+
+
+
+log_regs = True
+log_mn = log_regs
+def run_bin(my_eip, known_blocs, code_blocs_mem_range):
+    global log_regs, log_mn
+    while my_eip != 0x1337beef:
+
+        if not my_eip in known_blocs:
+            updt_bloc_emul(known_blocs, in_str, my_eip, symbol_pool, code_blocs_mem_range, log_regs = log_regs, log_mn = log_mn)
+        try:
+            my_eip = vm_exec_blocs(my_eip, known_blocs)
+        except KeyboardInterrupt:
+            break
+        py_exception = vm_get_exception()
+        if py_exception:
+            if py_exception & EXCEPT_CODE_AUTOMOD:
+                print 'automod code'
+                dump_gpregs_py()
+                known_blocs, code_blocs_mem_range = updt_automod_code(known_blocs)
+            else:
+                raise ValueError("except at", hex(my_eip))
+
+print "start emulation"
+run_bin(ad+code_ad, known_blocs, code_blocs_mem_range)
diff --git a/example/x86_sc.bin b/example/x86_sc.bin
new file mode 100644
index 00000000..af96aeb2
--- /dev/null
+++ b/example/x86_sc.bin
Binary files differ