| Index: courgette/testdata/rel32_x64_02.txt
|
| diff --git a/courgette/testdata/rel32_x64_02.txt b/courgette/testdata/rel32_x64_02.txt
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9a09327fbc08d5e92333856f8ec7780b8b47b526
|
| --- /dev/null
|
| +++ b/courgette/testdata/rel32_x64_02.txt
|
| @@ -0,0 +1,90 @@
|
| +# Test rel32 jump instructions with abs32 and .reloc obstructions.
|
| +
|
| +# .text start RVA and end RVA
|
| +1000
|
| +3000
|
| +# .reloc start RVA and end RVA
|
| +# Typically this won't overlap with .text.
|
| +# Note: If we use 1020, then the algorithm would never encounter it, so the
|
| +# .reloc does not get skipped! This edge case is not worth fixing right now.
|
| +101F
|
| +1030
|
| +# End RVA
|
| +5000
|
| +
|
| +# Assume ImageBase = 00400000. This does not affect the test.
|
| +Program:
|
| + 00401000: 55 push ebp
|
| + 00401001: 8B EC mov ebp,esp
|
| + 00401003: E8 00 00 00 00 call 00401008 # Overlaps with abs32
|
| + 00401008: E9 00 00 00 00 jmp 0040100D # Overlaps with abs32
|
| + 0040100D: 0F 80 00 00 00 00 jo 00401013
|
| + 00401013: 0F 81 00 00 00 00 jno 00401019
|
| + 00401019: 0F 82 00 00 00 00 jb 0040101F
|
| + 0040101F: 0F 83 00 00 00 00 jae 00401025 # Overlaps with .reloc
|
| + 00401025: 0F 84 00 00 00 00 je 0040102B # Overlaps with .reloc
|
| + 0040102B: 0F 85 00 00 00 00 jne 00401031 # Overlaps with .reloc
|
| + 00401031: 0F 86 00 00 00 00 jbe 00401037
|
| + 00401037: 0F 87 00 00 00 00 ja 0040103D
|
| + 0040103D: 0F 88 00 00 00 00 js 00401043
|
| + 00401043: 0F 89 00 00 00 00 jns 00401049
|
| + 00401049: 0F 8A 00 00 00 00 jp 0040104F # Ignored!
|
| + 0040104F: 0F 8B 00 00 00 00 jnp 00401055 # Ignored!
|
| + 00401055: 0F 8C 00 00 00 00 jl 0040105B # Overlaps with abs32
|
| + 0040105B: 0F 8D 00 00 00 00 jge 00401061 # Overlaps with abs32
|
| + 00401061: 0F 8E 00 00 00 00 jle 00401067
|
| + 00401067: 0F 8F 00 00 00 00 jg 0040106D
|
| + 0040106D: FF 15 00 00 00 00 call 00401073
|
| + 00401073: FF 25 00 00 00 00 jmp 00401079
|
| + 00401079: 8B 05 00 00 00 00 mov eax, 00401079
|
| + 0040107F: 8B 3D 00 00 00 00 mov edi, 00401085
|
| + 00401085: 8D 05 00 00 00 00 lea eax, 00401079
|
| + 0040108B: 8D 3D 00 00 00 00 lea edi, 00401079
|
| + 00401091: 48 8B 05 00 00 00 00 mov rax, 00401098
|
| + 00401098: 48 8B 3D 00 00 00 00 mov rdi, 0040109F
|
| + 0040109F: 48 8D 05 00 00 00 00 lea rax, 004010A6
|
| + 004010A6: 48 8D 3D 00 00 00 00 lea rdi, 004010AD
|
| + 004010AD: 4C 8B 05 00 00 00 00 mov r8, 004010B4
|
| + 004010B4: 4C 8B 3D 00 00 00 00 mov r15, 004010BB
|
| + 004010BB: 4C 8D 05 00 00 00 00 lea r8, 004010C2
|
| + 004010C2: 4C 8D 3D 00 00 00 00 lea r15, 004010C9
|
| + 004010C9: 5D pop ebp
|
| + 004010CA: C3 ret
|
| +
|
| +Abs32:
|
| +1004
|
| +1008
|
| +105A # Straddles across two instruction.
|
| +105F # Same, but covers the op code (and not the target) of the second.
|
| +
|
| +Expected:
|
| +# 1004
|
| +# 1009
|
| +100F
|
| +1015
|
| +101B
|
| +# 1021
|
| +# 1027
|
| +# 102D
|
| +1033
|
| +1039
|
| +103F
|
| +1045
|
| +# 1057
|
| +# 105D
|
| +1063
|
| +1069
|
| +106F
|
| +1075
|
| +107B
|
| +1081
|
| +1087
|
| +108D
|
| +1094
|
| +109B
|
| +10A2
|
| +10A9
|
| +10B0
|
| +10B7
|
| +10BE
|
| +10C5
|
|
|