Add some test cases for ModRM decoding
This commit is contained in:
@@ -15,6 +15,7 @@ endif
|
|||||||
|
|
||||||
testcases = [
|
testcases = [
|
||||||
['prefixes', 'prefixes.txt'],
|
['prefixes', 'prefixes.txt'],
|
||||||
|
['modrm', 'modrm.txt'],
|
||||||
|
|
||||||
['enter', 'decode-enter.sh'],
|
['enter', 'decode-enter.sh'],
|
||||||
['imul', 'decode-imul.sh'],
|
['imul', 'decode-imul.sh'],
|
||||||
|
|||||||
34
tests/modrm.txt
Normal file
34
tests/modrm.txt
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
# reg
|
||||||
|
decode 01c0 [ADD reg4:r0 reg4:r0]
|
||||||
|
decode 01c1 [ADD reg4:r1 reg4:r0]
|
||||||
|
decode 01d0 [ADD reg4:r0 reg4:r2]
|
||||||
|
decode 01ff [ADD reg4:r7 reg4:r7]
|
||||||
|
decode64 4101d0 [ADD reg4:r8 reg4:r2]
|
||||||
|
decode64 4501d0 [ADD reg4:r8 reg4:r10]
|
||||||
|
decode64 4501ff [ADD reg4:r15 reg4:r15]
|
||||||
|
# [reg]
|
||||||
|
decode 0100 [ADD mem4:r0 reg4:r0]
|
||||||
|
decode 0108 [ADD mem4:r0 reg4:r1]
|
||||||
|
decode 0101 [ADD mem4:r1 reg4:r0]
|
||||||
|
decode 0107 [ADD mem4:r7 reg4:r0]
|
||||||
|
decode 0138 [ADD mem4:r0 reg4:r7]
|
||||||
|
decode 010424 [ADD mem4:r4 reg4:r0]
|
||||||
|
decode64 410100 [ADD mem4:r8 reg4:r0]
|
||||||
|
decode64 440108 [ADD mem4:r0 reg4:r9]
|
||||||
|
decode64 450100 [ADD mem4:r8 reg4:r8]
|
||||||
|
decode64 410107 [ADD mem4:r15 reg4:r0]
|
||||||
|
decode64 41010424 [ADD mem4:r12 reg4:r0]
|
||||||
|
# [disp32]
|
||||||
|
decode32 010501000000 [ADD mem4:0x1 reg4:r0]
|
||||||
|
decode32 0105ffffffff [ADD mem4:-0x1 reg4:r0]
|
||||||
|
decode 01042501000000 [ADD mem4:0x1 reg4:r0]
|
||||||
|
decode64 4101042501000000 [ADD mem4:0x1 reg4:r0]
|
||||||
|
# [rip+disp32]
|
||||||
|
decode64 010501000000 [ADD mem4:r16+0x1 reg4:r0]
|
||||||
|
decode64 41010501000000 [ADD mem4:r16+0x1 reg4:r0]
|
||||||
|
# [reg+disp32]
|
||||||
|
decode 018001000000 [ADD mem4:r0+0x1 reg4:r0]
|
||||||
|
# [reg+eiz+disp32]
|
||||||
|
decode 01842501000000 [ADD mem4:r5+0x1 reg4:r0]
|
||||||
|
# [reg+s*reg+disp32]
|
||||||
|
decode64 4201842501000000 [ADD mem4:r5+1*r12+0x1 reg4:r0]
|
||||||
@@ -41,7 +41,8 @@ if __name__ == "__main__":
|
|||||||
test_modes = frozenset(args.test_modes if args.test_modes else [32, 64])
|
test_modes = frozenset(args.test_modes if args.test_modes else [32, 64])
|
||||||
|
|
||||||
for file in args.cases:
|
for file in args.cases:
|
||||||
cases = [tuple(ln.strip().split(maxsplit=2)) for ln in file.readlines()]
|
cases = [tuple(ln.strip().split(maxsplit=2)) for ln in file.readlines()
|
||||||
|
if ln and ln[0] != "#"]
|
||||||
for op, code, expected in cases:
|
for op, code, expected in cases:
|
||||||
case_modes = {"decode":{32,64},"decode32":{32},"decode64":{64}}[op]
|
case_modes = {"decode":{32,64},"decode32":{32},"decode64":{64}}[op]
|
||||||
if not case_modes & test_modes: continue
|
if not case_modes & test_modes: continue
|
||||||
|
|||||||
Reference in New Issue
Block a user