| from .base import TestBase |
| |
| from ..disassembler import Disassembler, Option_UseMarkup |
| |
| class TestDisassembler(TestBase): |
| def test_instantiate(self): |
| Disassembler('i686-apple-darwin9') |
| |
| def test_basic(self): |
| sequence = '\x67\xe3\x81' # jcxz -127 |
| triple = 'i686-apple-darwin9' |
| |
| disassembler = Disassembler(triple) |
| |
| count, s = disassembler.get_instruction(sequence) |
| self.assertEqual(count, 3) |
| self.assertEqual(s, '\tjcxz\t-127') |
| |
| def test_nonexistent_triple(self): |
| with self.assertRaisesRegexp(Exception, "Could not obtain disassembler for triple"): |
| Disassembler("nonexistent-triple-raises") |
| |
| def test_get_instructions(self): |
| sequence = '\x67\xe3\x81\x01\xc7' # jcxz -127; addl %eax, %edi |
| |
| disassembler = Disassembler('i686-apple-darwin9') |
| |
| instructions = list(disassembler.get_instructions(sequence)) |
| self.assertEqual(len(instructions), 2) |
| |
| self.assertEqual(instructions[0], (0, 3, '\tjcxz\t-127')) |
| self.assertEqual(instructions[1], (3, 2, '\taddl\t%eax, %edi')) |
| |
| def test_set_options(self): |
| sequence = '\x10\x40\x2d\xe9' |
| triple = 'arm-linux-android' |
| |
| disassembler = Disassembler(triple) |
| disassembler.set_options(Option_UseMarkup) |
| count, s = disassembler.get_instruction(sequence) |
| print s |
| self.assertEqual(count, 4) |
| self.assertEqual(s, '\tpush\t{<reg:r4>, <reg:lr>}') |