You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.4 KiB
65 lines
2.4 KiB
#!/usr/bin/python
|
|
|
|
# Test branches to absolute addresses for all architectures
|
|
|
|
# Github issue: #108
|
|
# Author: Fotis Loukos
|
|
|
|
from keystone import *
|
|
import regress
|
|
|
|
class TestARM(regress.RegressTest):
|
|
def runTest(self):
|
|
ks = Ks(KS_ARCH_ARM, KS_MODE_ARM)
|
|
encoding, count = ks.asm(b"b #0x1010", 0x1000)
|
|
self.assertEqual(encoding, [ 0x02, 0x00, 0x00, 0xea])
|
|
encoding, count = ks.asm(b"bl #0x1010", 0x1000)
|
|
self.assertEqual(encoding, [ 0x02, 0x00, 0x00, 0xeb])
|
|
|
|
class TestARMThumb(regress.RegressTest):
|
|
def runTest(self):
|
|
ks = Ks(KS_ARCH_ARM, KS_MODE_THUMB)
|
|
encoding, count = ks.asm(b"b #0x1010", 0x1000)
|
|
self.assertEqual(encoding, [ 0x06, 0xe0])
|
|
encoding, count = ks.asm(b"b.w #0x1010", 0x1000)
|
|
self.assertEqual(encoding, [ 0x00, 0xf0, 0x06, 0xb8])
|
|
encoding, count = ks.asm(b"b #0x101010", 0x1000)
|
|
self.assertEqual(encoding, [ 0x00, 0xf1, 0x06, 0xb8])
|
|
encoding, count = ks.asm(b"bl #0x1010", 0x1000)
|
|
self.assertEqual(encoding, [ 0x00, 0xf0, 0x06, 0xf8])
|
|
|
|
class TestARM64(regress.RegressTest):
|
|
def runTest(self):
|
|
ks = Ks(KS_ARCH_ARM64, 0)
|
|
encoding, count = ks.asm(b"b #0x1010", 0x1000)
|
|
self.assertEqual(encoding, [ 0x04, 0x00, 0x00, 0x14])
|
|
encoding, count = ks.asm(b"bl #0x1010", 0x1000)
|
|
self.assertEqual(encoding, [ 0x04, 0x00, 0x00, 0x94])
|
|
|
|
class TestSPARC(regress.RegressTest):
|
|
def runTest(self):
|
|
ks = Ks(KS_ARCH_SPARC, KS_MODE_BIG_ENDIAN + KS_MODE_SPARC32)
|
|
encoding, count = ks.asm(b"b 0x1010", 0x1000)
|
|
self.assertEqual(encoding, [ 0x10, 0x80, 0x00, 0x04])
|
|
|
|
class TestMIPS(regress.RegressTest):
|
|
def runTest(self):
|
|
ks = Ks(KS_ARCH_MIPS, KS_MODE_MIPS32)
|
|
encoding, count = ks.asm(b"b 0x1010", 0x1000)
|
|
self.assertEqual(encoding, [ 0x03, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00])
|
|
|
|
class TestPPC(regress.RegressTest):
|
|
def runTest(self):
|
|
ks = Ks(KS_ARCH_PPC, KS_MODE_PPC32 + KS_MODE_BIG_ENDIAN)
|
|
encoding, count = ks.asm(b"b 0x1010", 0x1000)
|
|
self.assertEqual(encoding, [ 0x48, 0x00, 0x00, 0x10])
|
|
|
|
class TestSystemZ(regress.RegressTest):
|
|
def runTest(self):
|
|
ks = Ks(KS_ARCH_SYSTEMZ, KS_MODE_BIG_ENDIAN)
|
|
encoding, count = ks.asm(b"j 0x1010", 0x1000)
|
|
self.assertEqual(encoding, [ 0xa7, 0xf4, 0x00, 0x08])
|
|
|
|
if __name__ == '__main__':
|
|
regress.main()
|