diff options
Diffstat (limited to 'example/test_jit_arm.py')
| -rw-r--r-- | example/test_jit_arm.py | 72 |
1 files changed, 18 insertions, 54 deletions
diff --git a/example/test_jit_arm.py b/example/test_jit_arm.py index 2e54ee58..da4a0e6d 100644 --- a/example/test_jit_arm.py +++ b/example/test_jit_arm.py @@ -1,70 +1,34 @@ #!/usr/bin/env python #-*- coding:utf-8 -*- -from argparse import ArgumentParser from miasm2.analysis import debugging, gdbserver +from miasm2.analysis.sandbox import Sandbox_Linux_arml from miasm2.jitter.jitload import vm_load_elf, libimp, preload_elf from miasm2.analysis.machine import Machine +import logging from pdb import pm -parser = ArgumentParser( - description="""Sandbox an elf binary with arm engine -(ex: test_jit_arm.py example/md5_arm A684)""") -parser.add_argument("-r", "--log-regs", - help="Log registers value for each instruction", - action="store_true") -parser.add_argument("-m", "--log-mn", - help="Log desassembly conversion for each instruction", - action="store_true") -parser.add_argument("-n", "--log-newbloc", - help="Log basic blocks processed by the Jitter", - action="store_true") -parser.add_argument("-j", "--jitter", - help="Jitter engine. Possible values are : tcc (default), llvm", - default="tcc") -parser.add_argument("-d", "--debugging", - help="Attach a CLI debugguer to the sandboxed programm", - action="store_true") -parser.add_argument("binary", - help="binary to run") -parser.add_argument("addr", - help="start exec on addr") +parser = Sandbox_Linux_arml.parser(description="""Sandbox an elf binary with arm engine +(ex: test_jit_arm.py example/md5_arm -a A684)""") +parser.add_argument("filename", help="PE Filename") +parser.add_argument('-v', "--verbose", + help="verbose mode", action="store_true") -machine = Machine("arm") +options = parser.parse_args() +sb = Sandbox_Linux_arml(options.filename, options, globals()) -def jit_arm_binary(args): - filepath, entryp = args.binary, int(args.addr, 16) - myjit = machine.jitter(jit_type = args.jitter) - myjit.init_stack() - # Log level (if available with jitter engine) - myjit.jit.log_regs = args.log_regs - myjit.jit.log_mn = args.log_mn - myjit.jit.log_newbloc = args.log_newbloc +if options.verbose is True: + logging.basicConfig(level=logging.INFO) +else: + logging.basicConfig(level=logging.WARNING) - elf = vm_load_elf(myjit.vm, filepath) - libs = libimp() - preload_elf(myjit.vm, elf, libs) - myjit.add_lib_handler(libs) - myjit.add_breakpoint(0x1337BEEF, lambda _: exit(0)) - regs = myjit.cpu.get_gpreg() - regs['LR'] = 0x1337BEEF - myjit.cpu.set_gpreg(regs) - myjit.init_run(entryp) +if options.verbose is True: + sb.jitter.vm.dump_memory_page_pool() +if options.address is None: + raise ValueError('invalid address') +sb.run() - # Handle debugging - if args.debugging is True: - dbg = debugging.Debugguer(myjit) - cmd = debugging.DebugCmd(dbg) - cmd.cmdloop() - - else: - print(myjit.continue_run()) - -if __name__ == '__main__': - from sys import stderr - args = parser.parse_args() - jit_arm_binary(args) |