hexcore-unicorn 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,393 @@
1
+ /* Unicorn Emulator Engine */
2
+ /* By Nguyen Anh Quynh <aquynh@gmail.com>, 2015-2017 */
3
+ /* This file is released under LGPL2.
4
+ See COPYING.LGPL2 in root directory for more details
5
+ */
6
+
7
+ #ifndef UNICORN_ARM64_H
8
+ #define UNICORN_ARM64_H
9
+
10
+ #ifdef __cplusplus
11
+ extern "C" {
12
+ #endif
13
+
14
+ #ifdef _MSC_VER
15
+ #pragma warning(disable : 4201)
16
+ #endif
17
+
18
+ //> ARM64 CPU
19
+ typedef enum uc_cpu_arm64 {
20
+ UC_CPU_ARM64_A57 = 0,
21
+ UC_CPU_ARM64_A53,
22
+ UC_CPU_ARM64_A72,
23
+ UC_CPU_ARM64_MAX,
24
+
25
+ UC_CPU_ARM64_ENDING
26
+ } uc_cpu_arm64;
27
+
28
+ // ARM64 coprocessor registers, use this with UC_ARM64_REG_CP_REG to
29
+ // in call to uc_reg_write/read() to access the registers.
30
+ typedef struct uc_arm64_cp_reg {
31
+ uint32_t crn; // Coprocessor register number
32
+ uint32_t crm; // Coprocessor register number
33
+ uint32_t op0; // Opcode0
34
+ uint32_t op1; // Opcode1
35
+ uint32_t op2; // Opcode2
36
+ uint64_t val; // The value to read/write
37
+ } uc_arm64_cp_reg;
38
+
39
+ //> ARM64 registers
40
+ typedef enum uc_arm64_reg {
41
+ UC_ARM64_REG_INVALID = 0,
42
+
43
+ UC_ARM64_REG_X29,
44
+ UC_ARM64_REG_X30,
45
+ UC_ARM64_REG_NZCV,
46
+ UC_ARM64_REG_SP,
47
+ UC_ARM64_REG_WSP,
48
+ UC_ARM64_REG_WZR,
49
+ UC_ARM64_REG_XZR,
50
+ UC_ARM64_REG_B0,
51
+ UC_ARM64_REG_B1,
52
+ UC_ARM64_REG_B2,
53
+ UC_ARM64_REG_B3,
54
+ UC_ARM64_REG_B4,
55
+ UC_ARM64_REG_B5,
56
+ UC_ARM64_REG_B6,
57
+ UC_ARM64_REG_B7,
58
+ UC_ARM64_REG_B8,
59
+ UC_ARM64_REG_B9,
60
+ UC_ARM64_REG_B10,
61
+ UC_ARM64_REG_B11,
62
+ UC_ARM64_REG_B12,
63
+ UC_ARM64_REG_B13,
64
+ UC_ARM64_REG_B14,
65
+ UC_ARM64_REG_B15,
66
+ UC_ARM64_REG_B16,
67
+ UC_ARM64_REG_B17,
68
+ UC_ARM64_REG_B18,
69
+ UC_ARM64_REG_B19,
70
+ UC_ARM64_REG_B20,
71
+ UC_ARM64_REG_B21,
72
+ UC_ARM64_REG_B22,
73
+ UC_ARM64_REG_B23,
74
+ UC_ARM64_REG_B24,
75
+ UC_ARM64_REG_B25,
76
+ UC_ARM64_REG_B26,
77
+ UC_ARM64_REG_B27,
78
+ UC_ARM64_REG_B28,
79
+ UC_ARM64_REG_B29,
80
+ UC_ARM64_REG_B30,
81
+ UC_ARM64_REG_B31,
82
+ UC_ARM64_REG_D0,
83
+ UC_ARM64_REG_D1,
84
+ UC_ARM64_REG_D2,
85
+ UC_ARM64_REG_D3,
86
+ UC_ARM64_REG_D4,
87
+ UC_ARM64_REG_D5,
88
+ UC_ARM64_REG_D6,
89
+ UC_ARM64_REG_D7,
90
+ UC_ARM64_REG_D8,
91
+ UC_ARM64_REG_D9,
92
+ UC_ARM64_REG_D10,
93
+ UC_ARM64_REG_D11,
94
+ UC_ARM64_REG_D12,
95
+ UC_ARM64_REG_D13,
96
+ UC_ARM64_REG_D14,
97
+ UC_ARM64_REG_D15,
98
+ UC_ARM64_REG_D16,
99
+ UC_ARM64_REG_D17,
100
+ UC_ARM64_REG_D18,
101
+ UC_ARM64_REG_D19,
102
+ UC_ARM64_REG_D20,
103
+ UC_ARM64_REG_D21,
104
+ UC_ARM64_REG_D22,
105
+ UC_ARM64_REG_D23,
106
+ UC_ARM64_REG_D24,
107
+ UC_ARM64_REG_D25,
108
+ UC_ARM64_REG_D26,
109
+ UC_ARM64_REG_D27,
110
+ UC_ARM64_REG_D28,
111
+ UC_ARM64_REG_D29,
112
+ UC_ARM64_REG_D30,
113
+ UC_ARM64_REG_D31,
114
+ UC_ARM64_REG_H0,
115
+ UC_ARM64_REG_H1,
116
+ UC_ARM64_REG_H2,
117
+ UC_ARM64_REG_H3,
118
+ UC_ARM64_REG_H4,
119
+ UC_ARM64_REG_H5,
120
+ UC_ARM64_REG_H6,
121
+ UC_ARM64_REG_H7,
122
+ UC_ARM64_REG_H8,
123
+ UC_ARM64_REG_H9,
124
+ UC_ARM64_REG_H10,
125
+ UC_ARM64_REG_H11,
126
+ UC_ARM64_REG_H12,
127
+ UC_ARM64_REG_H13,
128
+ UC_ARM64_REG_H14,
129
+ UC_ARM64_REG_H15,
130
+ UC_ARM64_REG_H16,
131
+ UC_ARM64_REG_H17,
132
+ UC_ARM64_REG_H18,
133
+ UC_ARM64_REG_H19,
134
+ UC_ARM64_REG_H20,
135
+ UC_ARM64_REG_H21,
136
+ UC_ARM64_REG_H22,
137
+ UC_ARM64_REG_H23,
138
+ UC_ARM64_REG_H24,
139
+ UC_ARM64_REG_H25,
140
+ UC_ARM64_REG_H26,
141
+ UC_ARM64_REG_H27,
142
+ UC_ARM64_REG_H28,
143
+ UC_ARM64_REG_H29,
144
+ UC_ARM64_REG_H30,
145
+ UC_ARM64_REG_H31,
146
+ UC_ARM64_REG_Q0,
147
+ UC_ARM64_REG_Q1,
148
+ UC_ARM64_REG_Q2,
149
+ UC_ARM64_REG_Q3,
150
+ UC_ARM64_REG_Q4,
151
+ UC_ARM64_REG_Q5,
152
+ UC_ARM64_REG_Q6,
153
+ UC_ARM64_REG_Q7,
154
+ UC_ARM64_REG_Q8,
155
+ UC_ARM64_REG_Q9,
156
+ UC_ARM64_REG_Q10,
157
+ UC_ARM64_REG_Q11,
158
+ UC_ARM64_REG_Q12,
159
+ UC_ARM64_REG_Q13,
160
+ UC_ARM64_REG_Q14,
161
+ UC_ARM64_REG_Q15,
162
+ UC_ARM64_REG_Q16,
163
+ UC_ARM64_REG_Q17,
164
+ UC_ARM64_REG_Q18,
165
+ UC_ARM64_REG_Q19,
166
+ UC_ARM64_REG_Q20,
167
+ UC_ARM64_REG_Q21,
168
+ UC_ARM64_REG_Q22,
169
+ UC_ARM64_REG_Q23,
170
+ UC_ARM64_REG_Q24,
171
+ UC_ARM64_REG_Q25,
172
+ UC_ARM64_REG_Q26,
173
+ UC_ARM64_REG_Q27,
174
+ UC_ARM64_REG_Q28,
175
+ UC_ARM64_REG_Q29,
176
+ UC_ARM64_REG_Q30,
177
+ UC_ARM64_REG_Q31,
178
+ UC_ARM64_REG_S0,
179
+ UC_ARM64_REG_S1,
180
+ UC_ARM64_REG_S2,
181
+ UC_ARM64_REG_S3,
182
+ UC_ARM64_REG_S4,
183
+ UC_ARM64_REG_S5,
184
+ UC_ARM64_REG_S6,
185
+ UC_ARM64_REG_S7,
186
+ UC_ARM64_REG_S8,
187
+ UC_ARM64_REG_S9,
188
+ UC_ARM64_REG_S10,
189
+ UC_ARM64_REG_S11,
190
+ UC_ARM64_REG_S12,
191
+ UC_ARM64_REG_S13,
192
+ UC_ARM64_REG_S14,
193
+ UC_ARM64_REG_S15,
194
+ UC_ARM64_REG_S16,
195
+ UC_ARM64_REG_S17,
196
+ UC_ARM64_REG_S18,
197
+ UC_ARM64_REG_S19,
198
+ UC_ARM64_REG_S20,
199
+ UC_ARM64_REG_S21,
200
+ UC_ARM64_REG_S22,
201
+ UC_ARM64_REG_S23,
202
+ UC_ARM64_REG_S24,
203
+ UC_ARM64_REG_S25,
204
+ UC_ARM64_REG_S26,
205
+ UC_ARM64_REG_S27,
206
+ UC_ARM64_REG_S28,
207
+ UC_ARM64_REG_S29,
208
+ UC_ARM64_REG_S30,
209
+ UC_ARM64_REG_S31,
210
+ UC_ARM64_REG_W0,
211
+ UC_ARM64_REG_W1,
212
+ UC_ARM64_REG_W2,
213
+ UC_ARM64_REG_W3,
214
+ UC_ARM64_REG_W4,
215
+ UC_ARM64_REG_W5,
216
+ UC_ARM64_REG_W6,
217
+ UC_ARM64_REG_W7,
218
+ UC_ARM64_REG_W8,
219
+ UC_ARM64_REG_W9,
220
+ UC_ARM64_REG_W10,
221
+ UC_ARM64_REG_W11,
222
+ UC_ARM64_REG_W12,
223
+ UC_ARM64_REG_W13,
224
+ UC_ARM64_REG_W14,
225
+ UC_ARM64_REG_W15,
226
+ UC_ARM64_REG_W16,
227
+ UC_ARM64_REG_W17,
228
+ UC_ARM64_REG_W18,
229
+ UC_ARM64_REG_W19,
230
+ UC_ARM64_REG_W20,
231
+ UC_ARM64_REG_W21,
232
+ UC_ARM64_REG_W22,
233
+ UC_ARM64_REG_W23,
234
+ UC_ARM64_REG_W24,
235
+ UC_ARM64_REG_W25,
236
+ UC_ARM64_REG_W26,
237
+ UC_ARM64_REG_W27,
238
+ UC_ARM64_REG_W28,
239
+ UC_ARM64_REG_W29,
240
+ UC_ARM64_REG_W30,
241
+ UC_ARM64_REG_X0,
242
+ UC_ARM64_REG_X1,
243
+ UC_ARM64_REG_X2,
244
+ UC_ARM64_REG_X3,
245
+ UC_ARM64_REG_X4,
246
+ UC_ARM64_REG_X5,
247
+ UC_ARM64_REG_X6,
248
+ UC_ARM64_REG_X7,
249
+ UC_ARM64_REG_X8,
250
+ UC_ARM64_REG_X9,
251
+ UC_ARM64_REG_X10,
252
+ UC_ARM64_REG_X11,
253
+ UC_ARM64_REG_X12,
254
+ UC_ARM64_REG_X13,
255
+ UC_ARM64_REG_X14,
256
+ UC_ARM64_REG_X15,
257
+ UC_ARM64_REG_X16,
258
+ UC_ARM64_REG_X17,
259
+ UC_ARM64_REG_X18,
260
+ UC_ARM64_REG_X19,
261
+ UC_ARM64_REG_X20,
262
+ UC_ARM64_REG_X21,
263
+ UC_ARM64_REG_X22,
264
+ UC_ARM64_REG_X23,
265
+ UC_ARM64_REG_X24,
266
+ UC_ARM64_REG_X25,
267
+ UC_ARM64_REG_X26,
268
+ UC_ARM64_REG_X27,
269
+ UC_ARM64_REG_X28,
270
+
271
+ UC_ARM64_REG_V0,
272
+ UC_ARM64_REG_V1,
273
+ UC_ARM64_REG_V2,
274
+ UC_ARM64_REG_V3,
275
+ UC_ARM64_REG_V4,
276
+ UC_ARM64_REG_V5,
277
+ UC_ARM64_REG_V6,
278
+ UC_ARM64_REG_V7,
279
+ UC_ARM64_REG_V8,
280
+ UC_ARM64_REG_V9,
281
+ UC_ARM64_REG_V10,
282
+ UC_ARM64_REG_V11,
283
+ UC_ARM64_REG_V12,
284
+ UC_ARM64_REG_V13,
285
+ UC_ARM64_REG_V14,
286
+ UC_ARM64_REG_V15,
287
+ UC_ARM64_REG_V16,
288
+ UC_ARM64_REG_V17,
289
+ UC_ARM64_REG_V18,
290
+ UC_ARM64_REG_V19,
291
+ UC_ARM64_REG_V20,
292
+ UC_ARM64_REG_V21,
293
+ UC_ARM64_REG_V22,
294
+ UC_ARM64_REG_V23,
295
+ UC_ARM64_REG_V24,
296
+ UC_ARM64_REG_V25,
297
+ UC_ARM64_REG_V26,
298
+ UC_ARM64_REG_V27,
299
+ UC_ARM64_REG_V28,
300
+ UC_ARM64_REG_V29,
301
+ UC_ARM64_REG_V30,
302
+ UC_ARM64_REG_V31,
303
+
304
+ //> pseudo registers
305
+ UC_ARM64_REG_PC, // program counter register
306
+
307
+ UC_ARM64_REG_CPACR_EL1,
308
+
309
+ //> thread registers, depreciated, use UC_ARM64_REG_CP_REG instead
310
+ UC_ARM64_REG_TPIDR_EL0,
311
+ UC_ARM64_REG_TPIDRRO_EL0,
312
+ UC_ARM64_REG_TPIDR_EL1,
313
+
314
+ UC_ARM64_REG_PSTATE,
315
+
316
+ //> exception link registers, depreciated, use UC_ARM64_REG_CP_REG instead
317
+ UC_ARM64_REG_ELR_EL0,
318
+ UC_ARM64_REG_ELR_EL1,
319
+ UC_ARM64_REG_ELR_EL2,
320
+ UC_ARM64_REG_ELR_EL3,
321
+
322
+ //> stack pointers registers, depreciated, use UC_ARM64_REG_CP_REG instead
323
+ UC_ARM64_REG_SP_EL0,
324
+ UC_ARM64_REG_SP_EL1,
325
+ UC_ARM64_REG_SP_EL2,
326
+ UC_ARM64_REG_SP_EL3,
327
+
328
+ //> other CP15 registers, depreciated, use UC_ARM64_REG_CP_REG instead
329
+ UC_ARM64_REG_TTBR0_EL1,
330
+ UC_ARM64_REG_TTBR1_EL1,
331
+
332
+ UC_ARM64_REG_ESR_EL0,
333
+ UC_ARM64_REG_ESR_EL1,
334
+ UC_ARM64_REG_ESR_EL2,
335
+ UC_ARM64_REG_ESR_EL3,
336
+
337
+ UC_ARM64_REG_FAR_EL0,
338
+ UC_ARM64_REG_FAR_EL1,
339
+ UC_ARM64_REG_FAR_EL2,
340
+ UC_ARM64_REG_FAR_EL3,
341
+
342
+ UC_ARM64_REG_PAR_EL1,
343
+
344
+ UC_ARM64_REG_MAIR_EL1,
345
+
346
+ UC_ARM64_REG_VBAR_EL0,
347
+ UC_ARM64_REG_VBAR_EL1,
348
+ UC_ARM64_REG_VBAR_EL2,
349
+ UC_ARM64_REG_VBAR_EL3,
350
+
351
+ UC_ARM64_REG_CP_REG,
352
+
353
+ //> floating point control and status registers
354
+ UC_ARM64_REG_FPCR,
355
+ UC_ARM64_REG_FPSR,
356
+
357
+ UC_ARM64_REG_ENDING, // <-- mark the end of the list of registers
358
+
359
+ //> alias registers
360
+
361
+ UC_ARM64_REG_IP0 = UC_ARM64_REG_X16,
362
+ UC_ARM64_REG_IP1 = UC_ARM64_REG_X17,
363
+ UC_ARM64_REG_FP = UC_ARM64_REG_X29,
364
+ UC_ARM64_REG_LR = UC_ARM64_REG_X30,
365
+ } uc_arm64_reg;
366
+
367
+ // Callback function for tracing MRS/MSR/SYS/SYSL. If this callback returns
368
+ // true, the read/write to system registers would be skipped (even though it may
369
+ // cause exceptions!). Note one callback per instruction is allowed.
370
+ // @reg: The source/destination register.
371
+ // @cp_reg: The source/destincation system register.
372
+ // @user_data: The user data.
373
+ typedef uint32_t (*uc_cb_insn_sys_t)(uc_engine *uc, uc_arm64_reg reg,
374
+ const uc_arm64_cp_reg *cp_reg,
375
+ void *user_data);
376
+
377
+ //> ARM64 instructions
378
+ typedef enum uc_arm64_insn {
379
+ UC_ARM64_INS_INVALID = 0,
380
+
381
+ UC_ARM64_INS_MRS,
382
+ UC_ARM64_INS_MSR,
383
+ UC_ARM64_INS_SYS,
384
+ UC_ARM64_INS_SYSL,
385
+
386
+ UC_ARM64_INS_ENDING
387
+ } uc_arm64_insn;
388
+
389
+ #ifdef __cplusplus
390
+ }
391
+ #endif
392
+
393
+ #endif
@@ -0,0 +1,81 @@
1
+ /* Unicorn Emulator Engine */
2
+ /* By Nguyen Anh Quynh <aquynh@gmail.com>, 2014-2017 */
3
+ /* This file is released under LGPL2.
4
+ See COPYING.LGPL2 in root directory for more details
5
+ */
6
+
7
+ #ifndef UNICORN_M68K_H
8
+ #define UNICORN_M68K_H
9
+
10
+ #ifdef __cplusplus
11
+ extern "C" {
12
+ #endif
13
+
14
+ #ifdef _MSC_VER
15
+ #pragma warning(disable : 4201)
16
+ #endif
17
+
18
+ //> M68K CPU
19
+ typedef enum uc_cpu_m68k {
20
+ UC_CPU_M68K_M5206 = 0,
21
+ UC_CPU_M68K_M68000,
22
+ UC_CPU_M68K_M68020,
23
+ UC_CPU_M68K_M68030,
24
+ UC_CPU_M68K_M68040,
25
+ UC_CPU_M68K_M68060,
26
+ UC_CPU_M68K_M5208,
27
+ UC_CPU_M68K_CFV4E,
28
+ UC_CPU_M68K_ANY,
29
+
30
+ UC_CPU_M68K_ENDING
31
+ } uc_cpu_m68k;
32
+
33
+ //> M68K registers
34
+ typedef enum uc_m68k_reg {
35
+ UC_M68K_REG_INVALID = 0,
36
+
37
+ UC_M68K_REG_A0,
38
+ UC_M68K_REG_A1,
39
+ UC_M68K_REG_A2,
40
+ UC_M68K_REG_A3,
41
+ UC_M68K_REG_A4,
42
+ UC_M68K_REG_A5,
43
+ UC_M68K_REG_A6,
44
+ UC_M68K_REG_A7,
45
+
46
+ UC_M68K_REG_D0,
47
+ UC_M68K_REG_D1,
48
+ UC_M68K_REG_D2,
49
+ UC_M68K_REG_D3,
50
+ UC_M68K_REG_D4,
51
+ UC_M68K_REG_D5,
52
+ UC_M68K_REG_D6,
53
+ UC_M68K_REG_D7,
54
+
55
+ UC_M68K_REG_SR,
56
+ UC_M68K_REG_PC,
57
+
58
+ UC_M68K_REG_CR_SFC,
59
+ UC_M68K_REG_CR_DFC,
60
+ UC_M68K_REG_CR_VBR,
61
+ UC_M68K_REG_CR_CACR,
62
+ UC_M68K_REG_CR_TC,
63
+ UC_M68K_REG_CR_MMUSR,
64
+ UC_M68K_REG_CR_SRP,
65
+ UC_M68K_REG_CR_USP,
66
+ UC_M68K_REG_CR_MSP,
67
+ UC_M68K_REG_CR_ISP,
68
+ UC_M68K_REG_CR_URP,
69
+ UC_M68K_REG_CR_ITT0,
70
+ UC_M68K_REG_CR_ITT1,
71
+ UC_M68K_REG_CR_DTT0,
72
+ UC_M68K_REG_CR_DTT1,
73
+
74
+ UC_M68K_REG_ENDING, // <-- mark the end of the list of registers
75
+ } uc_m68k_reg;
76
+
77
+ #ifdef __cplusplus
78
+ }
79
+ #endif
80
+
81
+ #endif