Add some test cases for ModRM decoding
This commit is contained in:
@@ -15,6 +15,7 @@ endif
|
||||
|
||||
testcases = [
|
||||
['prefixes', 'prefixes.txt'],
|
||||
['modrm', 'modrm.txt'],
|
||||
|
||||
['enter', 'decode-enter.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])
|
||||
|
||||
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:
|
||||
case_modes = {"decode":{32,64},"decode32":{32},"decode64":{64}}[op]
|
||||
if not case_modes & test_modes: continue
|
||||
|
||||
Reference in New Issue
Block a user