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.
keystone/suite/regress/all_archs_value_directive.py

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()