1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
import logging
import time
from miasm.arch.ppc.arch import mn_ppc
from miasm.core.bin_stream import bin_stream_str
from miasm.core.utils import decode_hex, encode_hex
from pdb import pm
def h2i(s):
return decode_hex(s.replace(' ', ''))
reg_tests = [
('b', "XXXXXXXX ADDI R1, R1, 0x20", "38210020"),
('b', "XXXXXXXX ADDI R3, R4, 0x12", "38640012"),
('b', "XXXXXXXX ADDIC R3, R4, 0x12", "30640012"),
('b', "XXXXXXXX ADDIC R9, R0, 0xFFFFFFFF", "3120FFFF"),
('b', "XXXXXXXX ADDIC. R3, R4, 0x12", "34640012"),
('b', "XXXXXXXX ADDIC. R31, R31, 0xFFFFFFFE", "37fffffe"),
('b', "XXXXXXXX ADDIS R3, R4, 0x12", "3c640012"),
('b', "XXXXXXXX ADDIS R9, R9, 0xD76B", "3d29d76b"),
('b', "XXXXXXXX AND R8, R11, R28", "7d68e038"),
('b', "XXXXXXXX AND. R11, R9, R0", "7d2b0039"),
('b', "XXXXXXXX ANDC R0, R17, R19", "7e209878"),
('b', "XXXXXXXX ANDC. R9, R10, R0", "7d490079"),
('b', "XXXXXXXX ANDI. R9, R0, 0x1", "70090001"),
('b', "XXXXXXXX ANDIS. R9, R0, 0x1000", "74091000"),
('b', "XXXXXXXX B 0xBEE0", "4800bee0"),
('b', "XXXXXXXX BA 0xBEE0", "4800bee2"),
('b', "XXXXXXXX BGE CR0, 0x18", "40a00018"),
('b', "XXXXXXXX BGEA CR0, 0x18", "40a0001a"),
('b', "XXXXXXXX BGECTR CR0", "4ca00420"),
('b', "XXXXXXXX BGECTRL CR0", "4ca00421"),
('b', "XXXXXXXX BGEL CR0, 0x18", "40a00019"),
('b', "XXXXXXXX BGELA CR0, 0x18", "40a0001b"),
('b', "XXXXXXXX BGELR CR0", "4ca00020"),
('b', "XXXXXXXX BGELRL CR0", "4ca00021"),
('b', "XXXXXXXX CMPLWI CR7, R5, 0xBEEF", "2b85beef"),
('b', "XXXXXXXX CMPW CR3, R3, R2", "7d831000"),
('b', "XXXXXXXX CMPWI CR0, R0, 0x12", "2c000012"),
('b', "XXXXXXXX CRAND 0x3, 0x5, 0x2", "4c651202"),
('b', "XXXXXXXX ISYNC", "4c00012c"),
('b', "XXXXXXXX LBZ R11, 0xFFFFFFFE(R9)", "8969fffe"),
('b', "XXXXXXXX LBZU R0, 0x1(R31)", "8c1f0001"),
('b', "XXXXXXXX LBZUX R0, R31, R3", "7c1f18ee"),
('b', "XXXXXXXX LBZX R0, R30, R31", "7c1ef8ae"),
('b', "XXXXXXXX LFS FPR6, 0x1(R1)", "c0c10001"),
('b', "XXXXXXXX LHA R9, 0x8(R31)", "a93f0008"),
('b', "XXXXXXXX LHAU R0, 0xFFFFFFFE(R9)", "ac09fffe"),
('b', "XXXXXXXX LHAX R0, R11, R9", "7c0b4aae"),
('b', "XXXXXXXX LHZ R0, 0xC(R28)", "a01c000c"),
('b', "XXXXXXXX LHZX R0, R9, R10", "7c09522e"),
('b', "XXXXXXXX LMW R14, 0x8(R1)", "b9c10008"),
('b', "XXXXXXXX LSWI R5, R4, 0xC", "7ca464aa"),
('b', "XXXXXXXX LVEWX VR0, R1, R2", "7c01108e"),
('b', "XXXXXXXX LVSL VR0, R1, R2", "7c01100c"),
('b', "XXXXXXXX LVSR VR0, R1, R2", "7c01104c"),
('b', "XXXXXXXX LWZ R0, 0x24(R1)", "80010024"),
('b', "XXXXXXXX LWZU R0, 0x4(R7)", "84070004"),
('b', "XXXXXXXX LWZX R29, R25, R0", "7fb9002e"),
('b', "XXXXXXXX MCRF CR1, CR2", "4c880000"),
('b', "XXXXXXXX MFFS FPR23", "fee0048e"),
('b', "XXXXXXXX MTFSF 0x88, FPR6", "fd10358e"),
('b', "XXXXXXXX MTVSCR VR0", "10000644"),
('b', "XXXXXXXX MULLI R0, R2, 0xFFFFFFE7", "1c02ffe7"),
('b', "XXXXXXXX MULLI R3, R30, 0xC", "1c7e000c"),
('b', "XXXXXXXX NAND R0, R0, R0", "7c0003b8"),
('b', "XXXXXXXX OR R8, R0, R9", "7c084b78"),
('b', "XXXXXXXX OR. R8, R0, R11", "7c085b79"),
('b', "XXXXXXXX ORC R9, R19, R17", "7e698b38"),
('b', "XXXXXXXX ORI R0, R0, 0xBEAF", "6000beaf"),
('b', "XXXXXXXX ORI R0, R9, 0x2", "61200002"),
('b', "XXXXXXXX ORIS R29, R29, 0x1", "67bd0001"),
('b', "XXXXXXXX RFI", "4c000064"),
('b', "XXXXXXXX RLWIMI R3, R2, 0x3, 0x1, 0x10", "50431860"),
('b', "XXXXXXXX RLWNM. R3, R2, R4, 0x1, 0x10", "5c432061"),
('b', "XXXXXXXX SC", "44000002"),
('b', "XXXXXXXX SLW R11, R23, R31", "7eebf830"),
('b', "XXXXXXXX SRAW R0, R11, R31", "7d60fe30"),
('b', "XXXXXXXX SRAWI R0, R10, 0x3", "7d401e70"),
('b', "XXXXXXXX SRW R0, R23, R10", "7ee05430"),
('b', "XXXXXXXX STB R0, 0x1020(R30)", "981e1020"),
('b', "XXXXXXXX STBU R0, 0x1(R11)", "9c0b0001"),
('b', "XXXXXXXX STFS FPR6, 0x1(R1)", "d0c10001"),
('b', "XXXXXXXX STH R6, (R3)", "b0c30000"),
('b', "XXXXXXXX STMW R14, 0x8(R1)", "bdc10008"),
('b', "XXXXXXXX STW R0, 0x24(R1)", "90010024"),
('b', "XXXXXXXX STWU R1, 0xFFFFFFE0(R1)", "9421ffe0"),
('b', "XXXXXXXX SUBFIC R0, R2, 0xFFFFFFE0", "2002ffe0"),
('b', "XXXXXXXX SUBFIC R11, R31, 0x0", "217f0000"),
('b', "XXXXXXXX TW 0x5, R0, R3", "7ca01808"),
('b', "XXXXXXXX TWI 0x5, R0, 0x12", "0ca00012"),
('b', "XXXXXXXX XORI R9, R0, 0x62", "68090062"),
('b', "XXXXXXXX XORIS R10, R10, 0x8000", "6d4a8000"),
]
ts = time.time()
for mode, s, l, in reg_tests:
print("-" * 80)
s = s[12:]
b = h2i(l)
print("fromstring %r" % s)
l = mn_ppc.fromstring(s, None, mode)
for x in mn_ppc.asm(l):
print('(%r, "XXXXXXXX %s", "%s"),' % (mode, l, encode_hex(x)))
print("%s %r" % (mode, b))
mn = mn_ppc.dis(b, mode)
print("dis args %s" % [(str(x), x.size) for x in mn.args])
print(s)
print(mn)
assert(str(mn).strip() == s)
print('fromstring %r' % s)
l = mn_ppc.fromstring(s, None, mode)
print('str args %s' % [(str(x), x.size) for x in l.args])
assert(str(l).strip(' ') == s)
a = mn_ppc.asm(l)
print('asm result %s' % [x for x in a])
print(repr(b))
print(l.to_html())
print('test re dis')
for x in a:
print(repr(x))
rl = mn_ppc.dis(x, mode)
assert(str(rl).strip(' ') == s)
print("%r %s" % (b, a))
assert(b in a)
print('TEST time %s' % (time.time() - ts))
|