forked from jmpews/Dobby
-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathtest_insn_relo_arm64.cpp
97 lines (74 loc) · 2.14 KB
/
test_insn_relo_arm64.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
test_b:
b #-0x4000
b #0x4000
test_bl:
bl #-0x4000
bl #0x4000
test_cbz:
cbz x0, #-0x4000
cbz x0, #0x4000
test_ldr_liberal:
ldr x0, #-0x4000
ldr x0, #0x4000
test_adr:
adr x0, #-0x4000
adr x0, #0x4000
test_adrp:
adrp x0, #-0x4000
adrp x0, #0x4000
test_b_cond:
b.eq #-0x4000
b.eq #0x4000
test_tbz:
tbz x0, #0, #-0x4000
tbz x0, #0, #0x4000
*/
// clang -arch arm64 code_arm64.asm -o code_arm64.o
#include "InstructionRelocation/InstructionRelocation.h"
#include "UniconEmulator.h"
int main() {
set_global_arch("arm64");
// b #-0x4000
check_insn_relo("\x00\xf0\xff\x17", 4, true, -1, nullptr);
// b #0x4000
check_insn_relo("\x00\x10\x00\x14", 4, true, -1, nullptr);
// bl #-0x4000
check_insn_relo("\x00\xf0\xff\x97", 4, true, -1, nullptr);
// bl #0x4000
check_insn_relo("\x00\x10\x00\x94", 4, true, -1, nullptr);
// mov x0, #0
// cbz x0, #-0x4000
check_insn_relo("\x00\x00\x80\xd2\x00\x00\xfe\xb4", 8, true, -1, nullptr);
// mov x0, #0
// cbz x0, #0x4000
check_insn_relo("\x00\x00\x80\xd2\x00\x00\x02\xb4", 8, true, -1, nullptr);
// ldr x0, #-0x4000
check_insn_relo("\x00\x00\xfe\x58", 4, true, -1, nullptr);
// ldr x0, #0x4000
check_insn_relo("\x00\x00\x02\x58", 4, true, -1, nullptr);
// adr x0, #-0x4000
check_insn_relo("\x00\x00\xfe\x10", 4, false, UC_ARM64_REG_X0, nullptr);
// adr x0, #0x4000
check_insn_relo("\x00\x00\x02\x10", 4, false, UC_ARM64_REG_X0, nullptr);
// adrp x0, #-0x4000
check_insn_relo("\xe0\xff\xff\x90", 4, false, UC_ARM64_REG_X0, nullptr);
// adrp x0, #0x4000
check_insn_relo("\x20\x00\x00\x90", 4, false, UC_ARM64_REG_X0, nullptr);
// mov x0, #0
// cmp x0, #0
// b.eq #-0x4000
check_insn_relo("\x00\x00\x80\xd2\x1f\x00\x00\xf1\x00\x00\xfe\x54", 12, true, -1, nullptr);
// mov x0, #0
// cmp x0, #0
// b.eq #0x4000
check_insn_relo("\x00\x00\x80\xd2\x1f\x00\x00\xf1\x00\x00\x02\x54", 12, true, -1, nullptr);
// mov x0, #0xb
// tbz w0, 2, #-0x4000
check_insn_relo("\x60\x01\x80\xd2\x00\x00\x16\x36", 8, true, -1, nullptr);
// mov x0, #0xb
// mov x0, #0xb
// tbz w0, 2, #0x4000
check_insn_relo("\x60\x01\x80\xd2\x00\x00\x12\x36", 8, true, -1, nullptr);
return 0;
}