example/jitter/arm_sc.py
#! /usr/bin/env python2
#-*- coding:utf-8 -*-
from miasm.core.utils import int_to_byte
from miasm.analysis.sandbox import Sandbox_Linux_armb_str
from miasm.analysis.sandbox import Sandbox_Linux_arml_str
from miasm.loader.strpatchwork import StrPatchwork
from miasm.core.locationdb import LocationDB
from pdb import pm
parser = Sandbox_Linux_arml_str.parser(description="""Sandbox an elf binary with arm engine
(ex: jit_arm_sc.py example/demo_arm_l.bin)""")
parser.add_argument("filename", help="string Filename")
parser.add_argument("endianness", help="endianness [b/l]")
parser.add_argument('-v', "--verbose",
help="verbose mode", action="store_true")
options = parser.parse_args()
if options.endianness == 'b':
sandbox = Sandbox_Linux_armb_str
elif options.endianness == 'l':
sandbox = Sandbox_Linux_arml_str
else:
raise ValueError("Bad endianness!")
loc_db = LocationDB()
sb = sandbox(loc_db, options.filename, options, globals())
if options.address is None:
raise ValueError('invalid address')
sb.run()
# test correct de xor
start = sb.jitter.cpu.R0
stop = sb.jitter.cpu.R1
s = sb.jitter.vm.get_mem(start, stop-start)
s = StrPatchwork(s)
for i, c in enumerate(s):
s[i] = int_to_byte(ord(c)^0x11)
s = bytes(s)
assert(s == b"test string\x00")