From e093c21ed880ac3eb72119be15093ee04f8ce299 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Tue, 5 Mar 2024 19:50:13 -0500 Subject: Move architecture modules into the API repo --- arch/armv7/thumb2_disasm/test.py | 53 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100755 arch/armv7/thumb2_disasm/test.py (limited to 'arch/armv7/thumb2_disasm/test.py') 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) + -- cgit v1.3.1