diff options
| author | Rusty Wagner <rusty.wagner@gmail.com> | 2024-03-05 19:50:13 -0500 |
|---|---|---|
| committer | Rusty Wagner <rusty.wagner@gmail.com> | 2024-03-05 20:34:34 -0500 |
| commit | e093c21ed880ac3eb72119be15093ee04f8ce299 (patch) | |
| tree | 9f720ebdc0ae415734b1199ed341668c69710a94 /arch/armv7/thumb2_disasm/test.py | |
| parent | 0609276712622908254065546102381466033141 (diff) | |
Move architecture modules into the API repo
Diffstat (limited to 'arch/armv7/thumb2_disasm/test.py')
| -rwxr-xr-x | arch/armv7/thumb2_disasm/test.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/arch/armv7/thumb2_disasm/test.py b/arch/armv7/thumb2_disasm/test.py new file mode 100755 index 00000000..65e4bd22 --- /dev/null +++ b/arch/armv7/thumb2_disasm/test.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python + +# (bytes, expected_disassembly, options) +test_cases = ( + (b'\x00\xbf', 'nop', {}), + (b'\xef\xf3\x09\x80', 'mrs r0, psp', {}), + (b'\x80\xf3\x09\x88', 'msr psp, r0', {}), + (b'\xef\xf3\x08\x80', 'mrs r0, msp', {}), + (b'\x80\xf3\x08\x88', 'msr msp, r0', {}), + (b'\xef\xf3\x00\x80', 'mrs r0, apsr', {}), + (b'\xef\xf3\x10\x80', 'mrs r0, primask', {}), + (b'\xef\xf3\x11\x80', 'mrs r0, basepri', {}), + (b'\xef\xf3\x13\x80', 'mrs r0, faultmask', {}), + (b'\xef\xf3\x14\x80', 'mrs r0, control', {}), + (b'\x80\xf3\x00\x88', 'msr apsr_nzcvq, r0', {}), + (b'\x80\xf3\x10\x88', 'msr primask, r0', {}), + (b'\x80\xf3\x11\x88', 'msr basepri, r0', {}), + (b'\x80\xf3\x13\x88', 'msr faultmask, r0', {}), + (b'\x80\xf3\x14\x88', 'msr control, r0', {}), +) + +import sys, re +import binaryninja + +arch = None +def disassemble_binja(data, addr): + global arch + if not arch: + arch = binaryninja.Architecture['thumb2'] + (tokens, length) = arch.get_instruction_text(data, addr) + if not tokens or length==0: + return 'disassembly failed' + strs = map(lambda x: x.text, tokens) + instxt = ''.join(strs) + instxt = re.sub(r'\s+', ' ', instxt) + return instxt + +if __name__ == '__main__': + for (test_i, (data, expected, options)) in enumerate(test_cases): + addr = options.get('addr', 0) + actual = disassemble_binja(data, addr) + if actual != expected: + print('MISMATCH AT TEST %d!' % test_i) + print('\t data: %s' % repr(data)) + print('\t address: %08X' % addr) + print('\tinsvalue: 0x%08X' % insvalue) + print('\texpected: %s' % expected) + print('\t actual: %s' % actual) + sys.exit(-1) + + print('success!') + sys.exit(0) + |
