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.
50 lines
1.3 KiB
50 lines
1.3 KiB
#!/usr/bin/python
|
|
|
|
# Test for relative branch offsets validation after an instruction encoded which
|
|
# is specified using in byte encoded form using .word directive.
|
|
|
|
# Author: Jatin Kataria
|
|
|
|
from keystone import (Ks, KS_ARCH_ARM, KS_ARCH_PPC, KS_MODE_ARM,
|
|
KS_MODE_PPC32, KS_MODE_BIG_ENDIAN)
|
|
import regress
|
|
|
|
|
|
class TestARM(regress.RegressTest):
|
|
asm = b"""
|
|
mov r0, #0x30
|
|
bl #3230052728
|
|
.word 0xe6000010
|
|
mov r0, #0x41
|
|
bl #3230052712
|
|
"""
|
|
|
|
def runTest(self):
|
|
ks = Ks(KS_ARCH_ARM, KS_MODE_ARM)
|
|
encoding, count = ks.asm(self.asm, 0xc0000000)
|
|
expected_encoding = [48, 0, 160, 227, 91, 172, 33, 235, 16,
|
|
0, 0, 230, 65, 0, 160, 227, 84, 172, 33, 235]
|
|
self.assertEqual(encoding, expected_encoding)
|
|
|
|
|
|
class TestPPC(regress.RegressTest):
|
|
asm = b"""
|
|
li 4, 1;
|
|
addi 4, 4, 1;
|
|
bl 0xc000;
|
|
.long 0x38800001;
|
|
addi 5, 5, 1;
|
|
bl 0xc008;
|
|
"""
|
|
|
|
def runTest(self):
|
|
ks = Ks(KS_ARCH_PPC, KS_MODE_PPC32 + KS_MODE_BIG_ENDIAN)
|
|
encoding, count = ks.asm(self.asm, 0xc0000000)
|
|
expected_encoding = [56, 128, 0, 1, 56, 132, 0, 1, 72, 0, 191, 249, 56,
|
|
128, 0, 1, 56, 165, 0, 1, 72, 0, 191, 249]
|
|
self.assertEqual(encoding, expected_encoding)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
regress.main()
|