Index: src/trusted/validator_x86/testdata/64/tests_from_pydfa.test |
diff --git a/src/trusted/validator_x86/testdata/64/tests_from_pydfa.test b/src/trusted/validator_x86/testdata/64/tests_from_pydfa.test |
deleted file mode 100644 |
index 7ef03917556b146841afa86a9ac9883b26d57485..0000000000000000000000000000000000000000 |
--- a/src/trusted/validator_x86/testdata/64/tests_from_pydfa.test |
+++ /dev/null |
@@ -1,1069 +0,0 @@ |
-@hex: |
- # Originally these tests came from |
- # https://github.com/mseaborn/x86-decoder/blob/x86-64/validator_test.py |
- |
- # Check some simple allowed instructions. |
- # nop |
- 90 |
- # hlt |
- f4 |
- # mov $0x12345678, %rax |
- 48 c7 c0 78 56 34 12 |
- # mov $0x1234567812345678, %rax |
- 48 b8 78 56 34 12 78 56 34 12 |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to 13 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> is safe *** |
-@dis: |
- 0000000000000000: 90 nop |
- 0000000000000001: f4 hlt |
- 0000000000000002: 48 c7 c0 78 56 34 12 mov %rax, 0x12345678 |
- 0000000000000009: 48 b8 78 56 34 12 78 56 34 12 mov %rax, 0x1234567812345678 |
-@rdfa_output: |
- return code: 0 |
----------------------------------------------------------------------- |
-@hex: |
- # Check a disallowed instruction. |
- # nop |
- 90 |
- # int $0x80 |
- cd 80 |
-@rval: |
- VALIDATOR: 0000000000000001: cd 80 int 0x80 |
- VALIDATOR: ERROR: This instruction has been marked illegal by Native Client |
- VALIDATOR: Checking jump targets: 0 to 3 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 90 nop |
- 0000000000000001: cd 80 int 0x80 |
-@rdfa_output: |
- 1: [0] unrecognized instruction |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # ret |
- c3 |
-@rval: |
- VALIDATOR: 0000000000000000: c3 ret |
- VALIDATOR: ERROR: This instruction has been marked illegal by Native Client |
- VALIDATOR: 0000000000000000: c3 ret |
- VALIDATOR: ERROR: Illegal assignment to RSP |
- VALIDATOR: Checking jump targets: 0 to 1 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: c3 ret |
-@rdfa_output: |
- 0: [0] unrecognized instruction |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # syscall |
- 0f 05 |
-@rval: |
- VALIDATOR: 0000000000000000: 0f 05 syscall |
- VALIDATOR: ERROR: This instruction has been marked illegal by Native Client |
- VALIDATOR: 0000000000000000: 0f 05 syscall |
- VALIDATOR: ERROR: System instructions are not allowed by Native Client |
- VALIDATOR: Checking jump targets: 0 to 2 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 0f 05 syscall |
-@rdfa_output: |
- 0: [0] unrecognized instruction |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # mov $0x1234567812345678, %rax |
- 48 b8 78 56 34 12 78 56 34 12 |
- # mov $0x1234567812345678, %rax |
- 48 b8 78 56 34 12 78 56 34 12 |
- # mov $0x1234567812345678, %rax |
- 48 b8 78 56 34 12 78 56 34 12 |
- # mov $0x1234567812345678, %rax |
- 48 b8 78 56 34 12 78 56 34 12 |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to 28 |
- VALIDATOR: Checking that basic blocks are aligned |
- VALIDATOR: ERROR: 20: Bad basic block alignment. |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 48 b8 78 56 34 12 78 56 34 12 mov %rax, 0x1234567812345678 |
- 000000000000000a: 48 b8 78 56 34 12 78 56 34 12 mov %rax, 0x1234567812345678 |
- 0000000000000014: 48 b8 78 56 34 12 78 56 34 12 mov %rax, 0x1234567812345678 |
- 000000000000001e: 48 b8 78 56 34 12 78 56 34 12 mov %rax, 0x1234567812345678 |
-@rdfa_output: |
- 1e: [0] unrecognized instruction |
- 20: [0] direct jump out of range |
- 24: [0] direct jump out of range |
- return code: 1 |
-@validators_disagree: |
- Because RDFA validator recovered after bundle boundary. |
----------------------------------------------------------------------- |
-@hex: |
- # Forwards and backwards jumps. |
- # nop |
- 90 |
- # jmp .+6 |
- eb 04 |
- # jmp .+0 |
- eb fe |
- # jmp .-2 |
- eb fc |
- # jmp .-4 |
- eb fa |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to 9 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> is safe *** |
-@dis: |
- 0000000000000000: 90 nop |
- 0000000000000001: eb 04 jmp 0x7 |
- 0000000000000003: eb fe jmp 0x3 |
- 0000000000000005: eb fc jmp 0x3 |
- 0000000000000007: eb fa jmp 0x3 |
-@rdfa_output: |
- return code: 0 |
----------------------------------------------------------------------- |
-@hex: |
- # Out-of-range unaligned jump. |
- # jmp .-1 |
- eb fd |
-@rval: |
- VALIDATOR: 0000000000000000: eb fd jmp 0xffffffffffffffff |
- VALIDATOR: ERROR: Instruction jumps to bad address |
- VALIDATOR: Checking jump targets: 0 to 2 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: eb fd jmp 0xffffffffffffffff |
-@rdfa_output: |
- 0: [0] direct jump out of range |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # Out-of-range unaligned jump. |
- # jmp .+33 |
- eb 1f |
-@rval: |
- VALIDATOR: 0000000000000000: eb 1f jmp 0x21 |
- VALIDATOR: ERROR: Instruction jumps to bad address |
- VALIDATOR: Checking jump targets: 0 to 2 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: eb 1f jmp 0x21 |
-@rdfa_output: |
- 0: [0] direct jump out of range |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # Jump into instruction. |
- # mov $0x1234567812345678, %rax |
- 48 b8 78 56 34 12 78 56 34 12 |
- # jmp .-5 |
- eb f9 |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to c |
- VALIDATOR: ERROR: 5: Bad jump target |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 48 b8 78 56 34 12 78 56 34 12 mov %rax, 0x1234567812345678 |
- 000000000000000a: eb f9 jmp 0x5 |
-@rdfa_output: |
- a: [0] bad jump target |
- return code: 1 |
-@validators_disagree: |
- Difference in jump reporting. |
----------------------------------------------------------------------- |
-@hex: |
- # Unmasked indirect jumps are disallowed. |
- # jmp *%rax |
- ff e0 |
-@rval: |
- VALIDATOR: 0000000000000000: ff e0 jmp %rax |
- VALIDATOR: ERROR: Invalid indirect jump |
- VALIDATOR: Checking jump targets: 0 to 2 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: ff e0 jmp %rax |
-@rdfa_output: |
- 0: [0] unrecognized instruction |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # jmp *(%rax) |
- ff 20 |
-@rval: |
- VALIDATOR: 0000000000000000: ff 20 jmp [%rax] |
- VALIDATOR: ERROR: Invalid base register in memory offset |
- VALIDATOR: 0000000000000000: ff 20 jmp [%rax] |
- VALIDATOR: ERROR: Jump not native client compliant |
- VALIDATOR: Checking jump targets: 0 to 2 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: ff 20 jmp [%rax] |
-@rdfa_output: |
- 0: [0] unrecognized instruction |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # call *%rax |
- ff d0 |
-@rval: |
- VALIDATOR: 0000000000000000: ff d0 call %rax |
- VALIDATOR: ERROR: Invalid indirect jump |
- VALIDATOR: 0000000000000000: ff d0 call %rax |
- VALIDATOR: WARNING: Bad call alignment, return pc = 2 |
- VALIDATOR: Checking jump targets: 0 to 2 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: ff d0 call %rax |
-@rdfa_output: |
- 0: [0] unrecognized instruction |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # call *(%rax) |
- ff 10 |
-@rval: |
- VALIDATOR: 0000000000000000: ff 10 call [%rax] |
- VALIDATOR: ERROR: Invalid base register in memory offset |
- VALIDATOR: 0000000000000000: ff 10 call [%rax] |
- VALIDATOR: ERROR: Jump not native client compliant |
- VALIDATOR: 0000000000000000: ff 10 call [%rax] |
- VALIDATOR: WARNING: Bad call alignment, return pc = 2 |
- VALIDATOR: Checking jump targets: 0 to 2 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: ff 10 call [%rax] |
-@rdfa_output: |
- 0: [0] unrecognized instruction |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # Masking instructions on their own are allowed. |
- # and $~31, %eax |
- 83 e0 e0 |
- # and $~31, %ebx |
- 83 e3 e0 |
- # and $~31, %rax |
- 48 83 e0 e0 |
- # and $~31, %rbx |
- 48 83 e3 e0 |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to e |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> is safe *** |
-@dis: |
- 0000000000000000: 83 e0 e0 and %eax, 0xe0 |
- 0000000000000003: 83 e3 e0 and %ebx, 0xe0 |
- 0000000000000006: 48 83 e0 e0 and %rax, 0xe0 |
- 000000000000000a: 48 83 e3 e0 and %rbx, 0xe0 |
-@rdfa_output: |
- return code: 0 |
----------------------------------------------------------------------- |
-@hex: |
- # and $~31, %eax |
- 83 e0 e0 |
- # add %r15, %rax |
- 4c 01 f8 |
- |
- # and $~31, %ebx |
- 83 e3 e0 |
- # add %r15, %rbx |
- 4c 01 fb |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to c |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> is safe *** |
-@dis: |
- 0000000000000000: 83 e0 e0 and %eax, 0xe0 |
- 0000000000000003: 4c 01 f8 add %rax, %r15 |
- 0000000000000006: 83 e3 e0 and %ebx, 0xe0 |
- 0000000000000009: 4c 01 fb add %rbx, %r15 |
-@rdfa_output: |
- return code: 0 |
----------------------------------------------------------------------- |
-@hex: |
- # Masked indirect jumps are allowed. |
- # and $~31, %eax |
- 83 e0 e0 \\ |
- # add %r15, %rax |
- 4c 01 f8 \\ |
- # jmp *%rax |
- ff e0 |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to 8 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> is safe *** |
-@dis: |
- 0000000000000000: 83 e0 e0 and %eax, 0xe0 |
- 0000000000000003: 4c 01 f8 add %rax, %r15 |
- 0000000000000006: ff e0 jmp %rax |
-@rdfa_output: |
- return code: 0 |
----------------------------------------------------------------------- |
-@hex: |
- # and $~31, %ebx |
- 83 e3 e0 \\ |
- # add %r15, %rbx |
- 4c 01 fb \\ |
- # call *%rbx |
- ff d3 |
-@rval: |
- VALIDATOR: 0000000000000006: ff d3 call %rbx |
- VALIDATOR: WARNING: Bad call alignment, return pc = 8 |
- VALIDATOR: Checking jump targets: 0 to 8 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> is safe *** |
-@dis: |
- 0000000000000000: 83 e3 e0 and %ebx, 0xe0 |
- 0000000000000003: 4c 01 fb add %rbx, %r15 |
- 0000000000000006: ff d3 call %rbx |
-@rdfa_output: |
- return code: 0 |
----------------------------------------------------------------------- |
-@hex: |
- # The registers must match up for the mask and the jump. |
- # and $~31, %ebx |
- 83 e3 e0 |
- # add %r15, %rax |
- 4c 01 f8 |
- # jmp *%rax |
- ff e0 |
-@rval: |
- VALIDATOR: 0000000000000006: ff e0 jmp %rax |
- VALIDATOR: ERROR: Invalid indirect jump |
- VALIDATOR: Checking jump targets: 0 to 8 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 83 e3 e0 and %ebx, 0xe0 |
- 0000000000000003: 4c 01 f8 add %rax, %r15 |
- 0000000000000006: ff e0 jmp %rax |
-@rdfa_output: |
- 6: [0] unrecognized instruction |
- return code: 1 |
-@validators_disagree: |
- Difference in error reporting. |
----------------------------------------------------------------------- |
-@hex: |
- # and $~31, %eax |
- 83 e0 e0 |
- # add %r15, %rbx |
- 4c 01 fb |
- # jmp *%rax |
- ff e0 |
-@rval: |
- VALIDATOR: 0000000000000006: ff e0 jmp %rax |
- VALIDATOR: ERROR: Invalid indirect jump |
- VALIDATOR: Checking jump targets: 0 to 8 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 83 e0 e0 and %eax, 0xe0 |
- 0000000000000003: 4c 01 fb add %rbx, %r15 |
- 0000000000000006: ff e0 jmp %rax |
-@rdfa_output: |
- 6: [0] unrecognized instruction |
- return code: 1 |
-@validators_disagree: |
- Difference in error reporting. |
----------------------------------------------------------------------- |
-@hex: |
- # and $~31, %eax |
- 83 e0 e0 |
- # add %r15, %rax |
- 4c 01 f8 |
- # jmp *%rbx |
- ff e3 |
-@rval: |
- VALIDATOR: 0000000000000006: ff e3 jmp %rbx |
- VALIDATOR: ERROR: Invalid indirect jump |
- VALIDATOR: Checking jump targets: 0 to 8 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 83 e0 e0 and %eax, 0xe0 |
- 0000000000000003: 4c 01 f8 add %rax, %r15 |
- 0000000000000006: ff e3 jmp %rbx |
-@rdfa_output: |
- 6: [0] unrecognized instruction |
- return code: 1 |
-@validators_disagree: |
- Difference in error reporting. |
----------------------------------------------------------------------- |
-@hex: |
- # and $~31, %eax |
- 83 e0 e0 |
- # add %r15, %rbx |
- 4c 01 fb |
- # jmp *%rbx |
- ff e3 |
-@rval: |
- VALIDATOR: 0000000000000006: ff e3 jmp %rbx |
- VALIDATOR: ERROR: Invalid indirect jump |
- VALIDATOR: Checking jump targets: 0 to 8 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 83 e0 e0 and %eax, 0xe0 |
- 0000000000000003: 4c 01 fb add %rbx, %r15 |
- 0000000000000006: ff e3 jmp %rbx |
-@rdfa_output: |
- 6: [0] unrecognized instruction |
- return code: 1 |
-@validators_disagree: |
- Difference in error reporting. |
----------------------------------------------------------------------- |
-@hex: |
- # and $~31, %ebx |
- 83 e3 e0 |
- # add %r15, %rbx |
- 4c 01 fb |
- # jmp *%rax |
- ff e0 |
-@rval: |
- VALIDATOR: 0000000000000006: ff e0 jmp %rax |
- VALIDATOR: ERROR: Invalid indirect jump |
- VALIDATOR: Checking jump targets: 0 to 8 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 83 e3 e0 and %ebx, 0xe0 |
- 0000000000000003: 4c 01 fb add %rbx, %r15 |
- 0000000000000006: ff e0 jmp %rax |
-@rdfa_output: |
- 6: [0] unrecognized instruction |
- return code: 1 |
-@validators_disagree: |
- Difference in error reporting. |
----------------------------------------------------------------------- |
-@hex: |
- # The mask and the jump must be adjacent. |
- # and $~31, %eax |
- 83 e0 e0 |
- # nop |
- 90 |
- # add %r15, %rax |
- 4c 01 f8 |
- # jmp *%rax |
- ff e0 |
-@rval: |
- VALIDATOR: 0000000000000007: ff e0 jmp %rax |
- VALIDATOR: ERROR: Invalid indirect jump |
- VALIDATOR: Checking jump targets: 0 to 9 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 83 e0 e0 and %eax, 0xe0 |
- 0000000000000003: 90 nop |
- 0000000000000004: 4c 01 f8 add %rax, %r15 |
- 0000000000000007: ff e0 jmp %rax |
-@rdfa_output: |
- 7: [0] unrecognized instruction |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # and $~31, %eax |
- 83 e0 e0 |
- # add %r15, %rax |
- 4c 01 f8 |
- # nop |
- 90 |
- # jmp *%rax |
- ff e0 |
-@rval: |
- VALIDATOR: 0000000000000007: ff e0 jmp %rax |
- VALIDATOR: ERROR: Invalid indirect jump |
- VALIDATOR: Checking jump targets: 0 to 9 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 83 e0 e0 and %eax, 0xe0 |
- 0000000000000003: 4c 01 f8 add %rax, %r15 |
- 0000000000000006: 90 nop |
- 0000000000000007: ff e0 jmp %rax |
-@rdfa_output: |
- 7: [0] unrecognized instruction |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # Jumping into the middle of the superinstruction must be rejected. |
- # and $~31, %eax |
- 83 e0 e0 |
- # add %r15, %rax |
- 4c 01 f8 |
- # jmp *%rax |
- ff e0 |
- # jmp .-2 |
- eb fc |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to a |
- VALIDATOR: ERROR: 6: Bad jump target |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 83 e0 e0 and %eax, 0xe0 |
- 0000000000000003: 4c 01 f8 add %rax, %r15 |
- 0000000000000006: ff e0 jmp %rax |
- 0000000000000008: eb fc jmp 0x6 |
-@rdfa_output: |
- 8: [0] bad jump target |
- return code: 1 |
-@validators_disagree: |
- Difference in jump reporting. |
----------------------------------------------------------------------- |
-@hex: |
- # and $~31, %eax |
- 83 e0 e0 |
- # add %r15, %rax |
- 4c 01 f8 |
- # jmp *%rax |
- ff e0 |
- # jmp .-5 |
- eb f9 |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to a |
- VALIDATOR: ERROR: 3: Bad jump target |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 83 e0 e0 and %eax, 0xe0 |
- 0000000000000003: 4c 01 f8 add %rax, %r15 |
- 0000000000000006: ff e0 jmp %rax |
- 0000000000000008: eb f9 jmp 0x3 |
-@rdfa_output: |
- 8: [0] bad jump target |
- return code: 1 |
-@validators_disagree: |
- TODO: explain this |
- Difference in jump reporting. |
----------------------------------------------------------------------- |
-@hex: |
- # Read-only access to special registers is allowed. |
- # push %rax |
- 50 |
- # push %rbp |
- 55 |
- # push %rsp |
- 54 |
- # push %r15 |
- 41 57 |
- # mov %rsp, %rax |
- 48 89 e0 |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to 8 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> is safe *** |
-@dis: |
- 0000000000000000: 50 push %rax |
- 0000000000000001: 55 push %rbp |
- 0000000000000002: 54 push %rsp |
- 0000000000000003: 41 57 push %r15 |
- 0000000000000005: 48 89 e0 mov %rax, %rsp |
-@rdfa_output: |
- return code: 0 |
----------------------------------------------------------------------- |
-@hex: |
- # Write access to special registers is not allowed. |
- # pop %rax |
- 58 |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to 1 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> is safe *** |
-@dis: |
- 0000000000000000: 58 pop %rax |
-@rdfa_output: |
- return code: 0 |
----------------------------------------------------------------------- |
-@hex: |
- # pop %rbp |
- 5d |
-@rval: |
- VALIDATOR: 0000000000000000: 5d pop %rbp |
- VALIDATOR: ERROR: Illegal change to register RBP |
- VALIDATOR: Checking jump targets: 0 to 1 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 5d pop %rbp |
-@rdfa_output: |
- 0: [0] error - %bpl or %bp is changed |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # pop %rsp |
- 5c |
-@rval: |
- VALIDATOR: 0000000000000000: 5c pop %rsp |
- VALIDATOR: ERROR: Illegal assignment to RSP |
- VALIDATOR: Checking jump targets: 0 to 1 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 5c pop %rsp |
-@rdfa_output: |
- 0: [0] error - %spl or %sp is changed |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # pop %r15 |
- 41 5f |
-@rval: |
- VALIDATOR: 0000000000000000: 41 5f pop %r15 |
- VALIDATOR: ERROR: Illegal to change the value of register RegR15 |
- VALIDATOR: Checking jump targets: 0 to 2 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 41 5f pop %r15 |
-@rdfa_output: |
- 0: [0] error - %r15 is changed |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # Memory accesses. |
- # mov %eax, %eax |
- 89 c0 \\ |
- # mov (%r15, %rax), %ebx |
- 41 8b 1c 07 |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to 6 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> is safe *** |
-@dis: |
- 0000000000000000: 89 c0 mov %eax, %eax |
- 0000000000000002: 41 8b 1c 07 mov %ebx, [%r15+%rax*1] |
-@rdfa_output: |
- return code: 0 |
----------------------------------------------------------------------- |
-@hex: |
- # Test for a top-bit-set register. |
- # mov %r12d, %r12d |
- 45 89 e4 \\ |
- # mov (%r15, %r12), %ebx |
- 43 8b 1c 27 |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to 7 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> is safe *** |
-@dis: |
- 0000000000000000: 45 89 e4 mov %r12d, %r12d |
- 0000000000000003: 43 8b 1c 27 mov %ebx, [%r15+%r12*1] |
-@rdfa_output: |
- return code: 0 |
----------------------------------------------------------------------- |
-@hex: |
- # Check %edi and %esi because the first 'mov' also begins superinstructions. |
- # mov %edi, %edi |
- 89 ff \\ |
- # mov (%r15, %rdi), %ebx |
- 41 8b 1c 3f |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to 6 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> is safe *** |
-@dis: |
- 0000000000000000: 89 ff mov %edi, %edi |
- 0000000000000002: 41 8b 1c 3f mov %ebx, [%r15+%rdi*1] |
-@rdfa_output: |
- return code: 0 |
----------------------------------------------------------------------- |
-@hex: |
- # mov %esi, %esi |
- 89 f6 \\ |
- # mov (%r15, %rsi), %ebx |
- 41 8b 1c 37 |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to 6 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> is safe *** |
-@dis: |
- 0000000000000000: 89 f6 mov %esi, %esi |
- 0000000000000002: 41 8b 1c 37 mov %ebx, [%r15+%rsi*1] |
-@rdfa_output: |
- return code: 0 |
----------------------------------------------------------------------- |
-@hex: |
- # Check mask on its own. |
- # mov %eax, %eax |
- 89 c0 |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to 2 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> is safe *** |
-@dis: |
- 0000000000000000: 89 c0 mov %eax, %eax |
-@rdfa_output: |
- return code: 0 |
----------------------------------------------------------------------- |
-@hex: |
- # mov (%r15, %rax), %ebx |
- 41 8b 1c 07 |
-@rval: |
- VALIDATOR: 0000000000000000: 41 8b 1c 07 mov %ebx, [%r15+%rax*1] |
- VALIDATOR: ERROR: Invalid index register in memory offset |
- VALIDATOR: Checking jump targets: 0 to 4 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 41 8b 1c 07 mov %ebx, [%r15+%rax*1] |
-@rdfa_output: |
- 0: [0] improper memory address - bad index |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # mov %eax, %eax |
- 89 c0 |
- # mov (%r15, %rax), %ebx |
- 41 8b 1c 07 |
- # jmp .-4 |
- eb fa |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to 8 |
- VALIDATOR: ERROR: 2: Bad jump target |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 89 c0 mov %eax, %eax |
- 0000000000000002: 41 8b 1c 07 mov %ebx, [%r15+%rax*1] |
- 0000000000000006: eb fa jmp 0x2 |
-@rdfa_output: |
- 6: [0] bad jump target |
- return code: 1 |
-@validators_disagree: |
- Difference in jump reporting. |
----------------------------------------------------------------------- |
-@hex: |
- # Check that post-conditions do not leak from a superinstruction. In the |
- # PyDFA validator, to share DFT states, the first instruction of the |
- # nacljmp, "and $~31, %eax", records a post-condition, just as when it is |
- # used on its own. Although the code below is safe, we don't really want |
- # the post-condition to leak through. |
- # and $~31, %eax |
- 83 e0 e0 |
- # add %r15, %rax |
- 4c 01 f8 |
- # jmp *%rax |
- ff e0 |
- # %rax should not be regarded as zero-extended here. |
- # mov (%r15, %rax), %ebx |
- 41 8b 1c 07 |
-@rval: |
- VALIDATOR: 0000000000000008: 41 8b 1c 07 mov %ebx, [%r15+%rax*1] |
- VALIDATOR: ERROR: Invalid index register in memory offset |
- VALIDATOR: Checking jump targets: 0 to c |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 83 e0 e0 and %eax, 0xe0 |
- 0000000000000003: 4c 01 f8 add %rax, %r15 |
- 0000000000000006: ff e0 jmp %rax |
- 0000000000000008: 41 8b 1c 07 mov %ebx, [%r15+%rax*1] |
-@rdfa_output: |
- 8: [0] improper memory address - bad index |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # mov %edi, %edi |
- 89 ff |
- # lea (%r15, %rdi), %rdi |
- 49 8d 3c 3f |
- # rep stos %al, %es:(%rdi) |
- f3 aa |
- # %rdi should not be regarded as zero-extended here. |
- # mov (%r15, %rdi), %ebx |
- 41 8b 1c 3f |
-@rval: |
- VALIDATOR: 0000000000000008: 41 8b 1c 3f mov %ebx, [%r15+%rdi*1] |
- VALIDATOR: ERROR: Invalid index register in memory offset |
- VALIDATOR: Checking jump targets: 0 to c |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 89 ff mov %edi, %edi |
- 0000000000000002: 49 8d 3c 3f lea %rdi, [%r15+%rdi*1] |
- 0000000000000006: f3 aa stosb [%rdi] |
- 0000000000000008: 41 8b 1c 3f mov %ebx, [%r15+%rdi*1] |
-@rdfa_output: |
- 8: [0] improper memory address - bad index |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # mov %esi, %esi |
- 89 f6 |
- # lea (%r15, %rsi), %rsi |
- 49 8d 34 37 |
- # mov %edi, %edi |
- 89 ff |
- # lea (%r15, %rdi), %rdi |
- 49 8d 3c 3f |
- # rep movsb %ds:(%rsi), %es:(%rdi) |
- f3 a4 |
- # %rsi should not be regarded as zero-extended here. |
- # mov (%r15, %rsi), %ebx |
- 41 8b 1c 37 |
-@rval: |
- VALIDATOR: 000000000000000e: 41 8b 1c 37 mov %ebx, [%r15+%rsi*1] |
- VALIDATOR: ERROR: Invalid index register in memory offset |
- VALIDATOR: Checking jump targets: 0 to 12 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 89 f6 mov %esi, %esi |
- 0000000000000002: 49 8d 34 37 lea %rsi, [%r15+%rsi*1] |
- 0000000000000006: 89 ff mov %edi, %edi |
- 0000000000000008: 49 8d 3c 3f lea %rdi, [%r15+%rdi*1] |
- 000000000000000c: f3 a4 movsb [%rdi], [%rsi] |
- 000000000000000e: 41 8b 1c 37 mov %ebx, [%r15+%rsi*1] |
-@rdfa_output: |
- e: [0] improper memory address - bad index |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # Non-%r15-based memory accesses. |
- # mov 0x1234(%rip), %eax |
- 8b 05 34 12 00 00 |
- # mov 0x1234(%rsp), %eax |
- 8b 84 24 34 12 00 00 |
- # mov 0x1234(%rbp), %eax |
- 8b 85 34 12 00 00 |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to 13 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> is safe *** |
-@dis: |
- 0000000000000000: 8b 05 34 12 00 00 mov %eax, [%rip+0x1234] |
- 0000000000000006: 8b 84 24 34 12 00 00 mov %eax, [%rsp+0x1234] |
- 000000000000000d: 8b 85 34 12 00 00 mov %eax, [%rbp+0x1234] |
-@rdfa_output: |
- return code: 0 |
----------------------------------------------------------------------- |
-@hex: |
- # mov 0x1234(%rsp, %rbx), %eax |
- 8b 84 1c 34 12 00 00 |
-@rval: |
- VALIDATOR: 0000000000000000: 8b 84 1c 34 12 00 00 mov %eax, [%rsp+%rbx*1+0x1234] |
- VALIDATOR: ERROR: Invalid index register in memory offset |
- VALIDATOR: Checking jump targets: 0 to 7 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 8b 84 1c 34 12 00 00 mov %eax, [%rsp+%rbx*1+0x1234] |
-@rdfa_output: |
- 0: [0] improper memory address - bad index |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # mov 0x1234(%rbp, %rbx), %eax |
- 8b 84 1d 34 12 00 00 |
-@rval: |
- VALIDATOR: 0000000000000000: 8b 84 1d 34 12 00 00 mov %eax, [%rbp+%rbx*1+0x1234] |
- VALIDATOR: ERROR: Invalid index register in memory offset |
- VALIDATOR: Checking jump targets: 0 to 7 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 8b 84 1d 34 12 00 00 mov %eax, [%rbp+%rbx*1+0x1234] |
-@rdfa_output: |
- 0: [0] improper memory address - bad index |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # mov %ebx, %ebx |
- 89 db \\ |
- # mov 0x1234(%rsp, %rbx), %eax |
- 8b 84 1c 34 12 00 00 |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to 9 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> is safe *** |
-@dis: |
- 0000000000000000: 89 db mov %ebx, %ebx |
- 0000000000000002: 8b 84 1c 34 12 00 00 mov %eax, [%rsp+%rbx*1+0x1234] |
-@rdfa_output: |
- return code: 0 |
----------------------------------------------------------------------- |
-@hex: |
- # mov %ebx, %ebx |
- 89 db \\ |
- # mov 0x1234(%rbp, %rbx), %eax |
- 8b 84 1d 34 12 00 00 |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to 9 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> is safe *** |
-@dis: |
- 0000000000000000: 89 db mov %ebx, %ebx |
- 0000000000000002: 8b 84 1d 34 12 00 00 mov %eax, [%rbp+%rbx*1+0x1234] |
-@rdfa_output: |
- return code: 0 |
----------------------------------------------------------------------- |
-@hex: |
- # 'lea' is not a memory access. |
- # lea (%rbx, %rcx, 4), %rax |
- 48 8d 04 8b |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to 4 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> is safe *** |
-@dis: |
- 0000000000000000: 48 8d 04 8b lea %rax, [%rbx+%rcx*4] |
-@rdfa_output: |
- return code: 0 |
----------------------------------------------------------------------- |
-@hex: |
- # Stack operations. |
- # mov %rsp, %rbp |
- 48 89 e5 |
- # mov %rbp, %rsp |
- 48 89 ec |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to 6 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> is safe *** |
-@dis: |
- 0000000000000000: 48 89 e5 mov %rbp, %rsp |
- 0000000000000003: 48 89 ec mov %rsp, %rbp |
-@rdfa_output: |
- return code: 0 |
----------------------------------------------------------------------- |
-@hex: |
- # add $8, %ebp |
- 83 c5 08 \\ |
- # add %r15, %rbp |
- 4c 01 fd |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to 6 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> is safe *** |
-@dis: |
- 0000000000000000: 83 c5 08 add %ebp, 0x8 |
- 0000000000000003: 4c 01 fd add %rbp, %r15 |
-@rdfa_output: |
- return code: 0 |
----------------------------------------------------------------------- |
-@hex: |
- # add $8, %ebp |
- 83 c5 08 |
- # add %r15, %rbp |
- 4c 01 fd |
- # jmp .-3 |
- eb fb |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to 8 |
- VALIDATOR: ERROR: 3: Bad jump target |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 83 c5 08 add %ebp, 0x8 |
- 0000000000000003: 4c 01 fd add %rbp, %r15 |
- 0000000000000006: eb fb jmp 0x3 |
-@rdfa_output: |
- 6: [0] bad jump target |
- return code: 1 |
-@validators_disagree: |
- Difference in jump reporting. |
----------------------------------------------------------------------- |
-@hex: |
- # A stack fixup on its own is not allowed. |
- # add %r15, %rbp |
- 4c 01 fd |
-@rval: |
- VALIDATOR: 0000000000000000: 4c 01 fd add %rbp, %r15 |
- VALIDATOR: ERROR: Illegal change to register RBP |
- VALIDATOR: Checking jump targets: 0 to 3 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 4c 01 fd add %rbp, %r15 |
-@rdfa_output: |
- 0: [0] improper %rbp sandboxing |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # add %r15, %rsp |
- 4c 01 fc |
-@rval: |
- VALIDATOR: 0000000000000000: 4c 01 fc add %rsp, %r15 |
- VALIDATOR: ERROR: Illegal assignment to RSP |
- VALIDATOR: Checking jump targets: 0 to 3 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 4c 01 fc add %rsp, %r15 |
-@rdfa_output: |
- 0: [0] improper %rsp sandboxing |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # add %r15, %r15 |
- 4d 01 ff |
-@rval: |
- VALIDATOR: 0000000000000000: 4d 01 ff add %r15, %r15 |
- VALIDATOR: ERROR: Illegal to change the value of register RegR15 |
- VALIDATOR: Checking jump targets: 0 to 3 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 4d 01 ff add %r15, %r15 |
-@rdfa_output: |
- 0: [0] error - %r15 is changed |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # Sandboxing is not required on prefetch instructions. |
- # prefetchnta (%rax) |
- 0f 18 00 |
-@rval: |
- VALIDATOR: Checking jump targets: 0 to 3 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> is safe *** |
-@dis: |
- 0000000000000000: 0f 18 00 prefetchnta [%rax] |
-@rdfa_output: |
- return code: 0 |
----------------------------------------------------------------------- |
-@hex: |
- # Segment register manipulations are forbidden |
- # mov %rax, %es |
- 48 8e c0 |
-@rval: |
- VALIDATOR: 0000000000000000: 48 8e c0 mov %es, %ax |
- VALIDATOR: ERROR: This instruction has been marked illegal by Native Client |
- VALIDATOR: 0000000000000000: 48 8e c0 mov %es, %ax |
- VALIDATOR: ERROR: Illegal assignment to segment register RegES |
- VALIDATOR: Checking jump targets: 0 to 3 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 48 8e c0 mov %es, %ax |
-@rdfa_output: |
- 0: [0] unrecognized instruction |
- return code: 1 |
----------------------------------------------------------------------- |
-@hex: |
- # mov %es, %rax |
- 48 8c c0 |
-@rval: |
- VALIDATOR: 0000000000000000: 48 8c c0 mov %rax, %es |
- VALIDATOR: ERROR: This instruction has been marked illegal by Native Client |
- VALIDATOR: Checking jump targets: 0 to 3 |
- VALIDATOR: Checking that basic blocks are aligned |
- *** <input> IS UNSAFE *** |
-@dis: |
- 0000000000000000: 48 8c c0 mov %rax, %es |
-@rdfa_output: |
- 0: [0] unrecognized instruction |
- return code: 1 |