about summary refs log tree commit diff stats
path: root/example/jitter/sandbox_call.py
diff options
context:
space:
mode:
authorAjax <commial@gmail.com>2017-04-05 16:28:54 +0200
committerAjax <commial@gmail.com>2017-04-06 14:26:50 +0200
commitb535f6e26e354ca61307f8153b862385ba9d2a04 (patch)
tree419067643408bed0acc81529791f714150ddf644 /example/jitter/sandbox_call.py
parentdc3a57fd1f0df922056edf087a9ac94c0005cd15 (diff)
downloadmiasm-b535f6e26e354ca61307f8153b862385ba9d2a04.tar.gz
miasm-b535f6e26e354ca61307f8153b862385ba9d2a04.zip
Introduce Sandbox.call, for direct function calling
Diffstat (limited to 'example/jitter/sandbox_call.py')
-rw-r--r--example/jitter/sandbox_call.py23
1 files changed, 23 insertions, 0 deletions
diff --git a/example/jitter/sandbox_call.py b/example/jitter/sandbox_call.py
new file mode 100644
index 00000000..49365004
--- /dev/null
+++ b/example/jitter/sandbox_call.py
@@ -0,0 +1,23 @@
+"""This example illustrate the Sandbox.call API, for direct call of a given
+function"""
+
+from miasm2.analysis.sandbox import Sandbox_Linux_arml
+from miasm2.analysis.binary import Container
+from miasm2.os_dep.linux_stdlib import linobjs
+from miasm2.core.utils import hexdump
+
+# Parse arguments
+parser = Sandbox_Linux_arml.parser(description="ELF sandboxer")
+parser.add_argument("filename", help="ELF Filename")
+options = parser.parse_args()
+
+sb = Sandbox_Linux_arml(options.filename, options, globals())
+
+with open(options.filename) as fdesc:
+    cont = Container.from_stream(fdesc)
+    addr_to_call = cont.symbol_pool.getby_name("md5_starts").offset
+
+# Calling md5_starts(malloc(0x64))
+addr = linobjs.heap.alloc(sb.jitter, 0x64)
+sb.call(addr_to_call, addr)
+hexdump(sb.jitter.vm.get_mem(addr, 0x64))