Files
weee/external/capstone/tests/issues/x86-prefixes.yaml
T

293 lines
9.0 KiB
YAML

test_cases:
# Test segment override priority
-
input:
name: "x86-16: rightmost segment override should take priority"
bytes: [ 0x26, 0x65, 0x64, 0x3E, 0x65, 0x2E, 0x00, 0x00 ]
arch: "CS_ARCH_X86"
options: [ CS_OPT_DETAIL, CS_MODE_16 ]
expected:
insns:
-
asm_text: "add byte ptr cs:[bx + si], al"
details:
x86:
prefix: [ X86_PREFIX_0, X86_PREFIX_CS, X86_PREFIX_0, X86_PREFIX_0 ]
-
input:
name: "x86-32: rightmost segment override should take priority"
bytes: [ 0x26, 0x65, 0x64, 0x3E, 0x65, 0x2E, 0x00, 0x00 ]
arch: "CS_ARCH_X86"
options: [ CS_OPT_DETAIL, CS_MODE_32 ]
expected:
insns:
-
asm_text: "add byte ptr cs:[eax], al"
details:
x86:
prefix: [ X86_PREFIX_0, X86_PREFIX_CS, X86_PREFIX_0, X86_PREFIX_0 ]
-
input:
name: "x86-64: rightmost segment override should take priority"
bytes: [ 0x26, 0x65, 0x64, 0x3E, 0x65, 0x2E, 0x00, 0x00 ]
arch: "CS_ARCH_X86"
options: [ CS_OPT_DETAIL, CS_MODE_64 ]
expected:
insns:
-
asm_text: "add byte ptr gs:[rax], al"
details:
x86:
prefix: [ X86_PREFIX_0, X86_PREFIX_GS, X86_PREFIX_0, X86_PREFIX_0 ]
-
input:
name: "x86-16: rightmost segment override should take priority"
bytes: [ 0x3E, 0x3E, 0x26, 0x36, 0x64, 0x36, 0x00, 0x00 ]
arch: "CS_ARCH_X86"
options: [ CS_OPT_DETAIL, CS_MODE_16 ]
expected:
insns:
-
asm_text: "add byte ptr ss:[bx + si], al"
details:
x86:
prefix: [ X86_PREFIX_0, X86_PREFIX_SS, X86_PREFIX_0, X86_PREFIX_0 ]
-
input:
name: "x86-32: rightmost segment override should take priority"
bytes: [ 0x3E, 0x3E, 0x26, 0x36, 0x64, 0x36, 0x00, 0x00 ]
arch: "CS_ARCH_X86"
options: [ CS_OPT_DETAIL, CS_MODE_32 ]
expected:
insns:
-
asm_text: "add byte ptr ss:[eax], al"
details:
x86:
prefix: [ X86_PREFIX_0, X86_PREFIX_SS, X86_PREFIX_0, X86_PREFIX_0 ]
-
input:
name: "x86-64: rightmost segment override should take priority"
bytes: [ 0x3E, 0x3E, 0x26, 0x36, 0x64, 0x36, 0x00, 0x00 ]
arch: "CS_ARCH_X86"
options: [ CS_OPT_DETAIL, CS_MODE_64 ]
expected:
insns:
-
asm_text: "add byte ptr fs:[rax], al"
details:
x86:
prefix: [ X86_PREFIX_0, X86_PREFIX_FS, X86_PREFIX_0, X86_PREFIX_0 ]
# Test segment override differences between 16/32 and 64-bit mode with ECDS and FS/GS
-
input:
name: "x86-16: ECSD segment overrides should override FS/GS segment overrides"
bytes: [ 0x64, 0x3E, 0x00, 0x00 ]
arch: "CS_ARCH_X86"
options: [ CS_OPT_DETAIL, CS_MODE_16 ]
expected:
insns:
-
asm_text: "add byte ptr ds:[bx + si], al"
details:
x86:
prefix: [ X86_PREFIX_0, X86_PREFIX_DS, X86_PREFIX_0, X86_PREFIX_0 ]
-
input:
name: "x86-32: ECSD segment overrides should override FS/GS segment overrides"
bytes: [ 0x64, 0x3E, 0x00, 0x00 ]
arch: "CS_ARCH_X86"
options: [ CS_OPT_DETAIL, CS_MODE_32 ]
expected:
insns:
-
asm_text: "add byte ptr ds:[eax], al"
details:
x86:
prefix: [ X86_PREFIX_0, X86_PREFIX_DS, X86_PREFIX_0, X86_PREFIX_0 ]
-
input:
name: "x86-64: ECSD segment overrides should be ignored and leave FS override intact"
bytes: [ 0x64, 0x3E, 0x00, 0x00 ]
arch: "CS_ARCH_X86"
options: [ CS_OPT_DETAIL, CS_MODE_64 ]
expected:
insns:
-
asm_text: "add byte ptr fs:[rax], al"
details:
x86:
prefix: [ X86_PREFIX_0, X86_PREFIX_FS, X86_PREFIX_0, X86_PREFIX_0 ]
-
input:
name: "x86-64: ECSD segment overrides should be ignored"
bytes: [ 0x3E, 0x00, 0x00 ]
arch: "CS_ARCH_X86"
options: [ CS_OPT_DETAIL, CS_MODE_64 ]
expected:
insns:
-
asm_text: "add byte ptr [rax], al"
details:
x86:
prefix: [ X86_PREFIX_0, X86_PREFIX_DS, X86_PREFIX_0, X86_PREFIX_0 ]
# Test duplicate segment override prefixes
-
input:
name: "x86-16: Duplicate ES override prefixes should decode successfully"
bytes: [ 0x26, 0x26, 0x00, 0x00 ]
arch: "CS_ARCH_X86"
options: [ CS_OPT_DETAIL, CS_MODE_16 ]
expected:
insns:
-
asm_text: "add byte ptr es:[bx + si], al"
details:
x86:
prefix: [ X86_PREFIX_0, X86_PREFIX_ES, X86_PREFIX_0, X86_PREFIX_0 ]
-
input:
name: "x86-32: Duplicate ES override prefixes should decode successfully"
bytes: [ 0x26, 0x26, 0x00, 0x00 ]
arch: "CS_ARCH_X86"
options: [ CS_OPT_DETAIL, CS_MODE_32 ]
expected:
insns:
-
asm_text: "add byte ptr es:[eax], al"
details:
x86:
prefix: [ X86_PREFIX_0, X86_PREFIX_ES, X86_PREFIX_0, X86_PREFIX_0 ]
-
input:
name: "x86-64: Duplicate FS override prefixes should decode successfully"
bytes: [ 0x64, 0x64, 0x00, 0x00 ]
arch: "CS_ARCH_X86"
options: [ CS_OPT_DETAIL, CS_MODE_64 ]
expected:
insns:
-
asm_text: "add byte ptr fs:[rax], al"
details:
x86:
prefix: [ X86_PREFIX_0, X86_PREFIX_FS, X86_PREFIX_0, X86_PREFIX_0 ]
# Test invalid REX prefix
-
input:
name: "x86-64: Invalid REX prefix should preserve previous segment override"
bytes: [ 0x64, 0x40, 0x2E, 0x00, 0x00 ]
arch: "CS_ARCH_X86"
options: [ CS_OPT_DETAIL, CS_MODE_64 ]
expected:
insns:
-
asm_text: "add byte ptr fs:[rax], al"
details:
x86:
prefix: [ X86_PREFIX_0, X86_PREFIX_FS, X86_PREFIX_0, X86_PREFIX_0 ]
-
input:
name: "x86-64: Invalid REX prefix should not add ECDS segment override"
bytes: [ 0x2E, 0x40, 0x2E, 0x00, 0x00 ]
arch: "CS_ARCH_X86"
options: [ CS_OPT_DETAIL, CS_MODE_64 ]
expected:
insns:
-
asm_text: "add byte ptr [rax], al"
details:
x86:
prefix: [ X86_PREFIX_0, X86_PREFIX_CS, X86_PREFIX_0, X86_PREFIX_0 ]
# Test whether `notrack` is correctly decoded
-
input:
name: "x86-16: notrack should decode correctly"
bytes: [ 0x3E, 0xE8, 0x00, 0x00 ]
arch: "CS_ARCH_X86"
options: [ CS_OPT_DETAIL, CS_MODE_16 ]
expected:
insns:
-
asm_text: "notrack call 4"
details:
x86:
prefix: [ X86_PREFIX_0, X86_PREFIX_DS, X86_PREFIX_0, X86_PREFIX_0 ]
-
input:
name: "x86-32: notrack should decode correctly"
bytes: [ 0x3E, 0xE8, 0x00, 0x00, 0x00, 0x00 ]
arch: "CS_ARCH_X86"
options: [ CS_OPT_DETAIL, CS_MODE_32 ]
expected:
insns:
-
asm_text: "notrack call 6"
details:
x86:
prefix: [ X86_PREFIX_0, X86_PREFIX_DS, X86_PREFIX_0, X86_PREFIX_0 ]
-
input:
name: "x86-64: notrack should decode correctly"
bytes: [ 0x3E, 0xE8, 0x00, 0x00, 0x00, 0x00 ]
arch: "CS_ARCH_X86"
options: [ CS_OPT_DETAIL, CS_MODE_64 ]
expected:
insns:
-
asm_text: "notrack call 6"
details:
x86:
prefix: [ X86_PREFIX_0, X86_PREFIX_DS, X86_PREFIX_0, X86_PREFIX_0 ]
-
input:
name: "x86-16: notrack should be applied when 0x3E is last segment override prefix"
bytes: [ 0x26, 0x64, 0x3E, 0xE8, 0x00, 0x00 ]
arch: "CS_ARCH_X86"
options: [ CS_OPT_DETAIL, CS_MODE_16 ]
expected:
insns:
-
asm_text: "notrack call 6"
details:
x86:
prefix: [ X86_PREFIX_0, X86_PREFIX_DS, X86_PREFIX_0, X86_PREFIX_0 ]
-
input:
name: "x86-32: notrack should be applied when 0x3E is last segment override prefix"
bytes: [ 0x26, 0x64, 0x3E, 0xE8, 0x00, 0x00, 0x00, 0x00 ]
arch: "CS_ARCH_X86"
options: [ CS_OPT_DETAIL, CS_MODE_32 ]
expected:
insns:
-
asm_text: "notrack call 8"
details:
x86:
prefix: [ X86_PREFIX_0, X86_PREFIX_DS, X86_PREFIX_0, X86_PREFIX_0 ]
-
input:
name: "x86-64: workaround: notrack should only be applied when 0x3E is last segment override prefix and no FS/GS segment override prefix is active"
bytes: [ 0x26, 0x64, 0x3E, 0xE8, 0x00, 0x00, 0x00, 0x00 ]
arch: "CS_ARCH_X86"
options: [ CS_OPT_DETAIL, CS_MODE_64 ]
expected:
insns:
-
asm_text: "call 8"
details:
x86:
prefix: [ X86_PREFIX_0, X86_PREFIX_FS, X86_PREFIX_0, X86_PREFIX_0 ]
-
input:
name: "x86-64: workaround: notrack should only be applied when 0x3E is last segment override prefix and no FS/GS segment override prefix is active"
bytes: [ 0x26, 0x2E, 0x3E, 0xE8, 0x00, 0x00, 0x00, 0x00 ]
arch: "CS_ARCH_X86"
options: [ CS_OPT_DETAIL, CS_MODE_64 ]
expected:
insns:
-
asm_text: "notrack call 8"
details:
x86:
prefix: [ X86_PREFIX_0, X86_PREFIX_DS, X86_PREFIX_0, X86_PREFIX_0 ]