Seregon/Hermes

Hermes/Dyforge is a program written in c++ allows you to inject a dll that can analyze all processes in a program, can be used for mod and reverse engeneering

C/3.8 KB/No license
DyMain/include/capstone/hppa.h
Hermes / DyMain / include / capstone / hppa.h
1#ifndef CAPSTONE_HPPA_H
2#define CAPSTONE_HPPA_H
3 
4#ifdef __cplusplus
5extern "C" {
6#endif
7 
8#include "cs_operand.h"
9#include "platform.h"
10 
11#define NUM_HPPA_OPS 5
12#define HPPA_STR_MODIFIER_LEN 8
13#define HPPA_MAX_MODIFIERS_LEN 5
14 
15/// Operand type for instruction's operands
16typedef enum hppa_op_type {
17 HPPA_OP_INVALID = CS_OP_INVALID,
18 HPPA_OP_REG = CS_OP_REG,
19 HPPA_OP_IMM = CS_OP_IMM,
20 HPPA_OP_IDX_REG = CS_OP_SPECIAL + 0,
21 HPPA_OP_DISP = CS_OP_SPECIAL + 1,
22 HPPA_OP_TARGET = CS_OP_SPECIAL + 2,
23 HPPA_OP_MEM = CS_OP_MEM,
24} hppa_op_type;
25 
26//> HPPA registers
27typedef enum hppa_reg {
28 HPPA_REG_INVALID = 0,
29 
30 ///> General registers
31 HPPA_REG_GR0,
32 HPPA_REG_GR1,
33 HPPA_REG_GR2,
34 HPPA_REG_GR3,
35 HPPA_REG_GR4,
36 HPPA_REG_GR5,
37 HPPA_REG_GR6,
38 HPPA_REG_GR7,
39 HPPA_REG_GR8,
40 HPPA_REG_GR9,
41 HPPA_REG_GR10,
42 HPPA_REG_GR11,
43 HPPA_REG_GR12,
44 HPPA_REG_GR13,
45 HPPA_REG_GR14,
46 HPPA_REG_GR15,
47 HPPA_REG_GR16,
48 HPPA_REG_GR17,
49 HPPA_REG_GR18,
50 HPPA_REG_GR19,
51 HPPA_REG_GR20,
52 HPPA_REG_GR21,
53 HPPA_REG_GR22,
54 HPPA_REG_GR23,
55 HPPA_REG_GR24,
56 HPPA_REG_GR25,
57 HPPA_REG_GR26,
58 HPPA_REG_GR27,
59 HPPA_REG_GR28,
60 HPPA_REG_GR29,
61 HPPA_REG_GR30,
62 HPPA_REG_GR31,
63 
64 ///> Floating-point registers
65 HPPA_REG_FPR0,
66 HPPA_REG_FPR1,
67 HPPA_REG_FPR2,
68 HPPA_REG_FPR3,
69 HPPA_REG_FPR4,
70 HPPA_REG_FPR5,
71 HPPA_REG_FPR6,
72 HPPA_REG_FPR7,
73 HPPA_REG_FPR8,
74 HPPA_REG_FPR9,
75 HPPA_REG_FPR10,
76 HPPA_REG_FPR11,
77 HPPA_REG_FPR12,
78 HPPA_REG_FPR13,
79 HPPA_REG_FPR14,
80 HPPA_REG_FPR15,
81 HPPA_REG_FPR16,
82 HPPA_REG_FPR17,
83 HPPA_REG_FPR18,
84 HPPA_REG_FPR19,
85 HPPA_REG_FPR20,
86 HPPA_REG_FPR21,
87 HPPA_REG_FPR22,
88 HPPA_REG_FPR23,
89 HPPA_REG_FPR24,
90 HPPA_REG_FPR25,
91 HPPA_REG_FPR26,
92 HPPA_REG_FPR27,
93 HPPA_REG_FPR28,
94 HPPA_REG_FPR29,
95 HPPA_REG_FPR30,
96 HPPA_REG_FPR31,
97 
98 ///> Space registers
99 HPPA_REG_SR0,
100 HPPA_REG_SR1,
101 HPPA_REG_SR2,
102 HPPA_REG_SR3,
103 HPPA_REG_SR4,
104 HPPA_REG_SR5,
105 HPPA_REG_SR6,
106 HPPA_REG_SR7,
107 
108 ///> Control registers
109 HPPA_REG_CR0,
110 HPPA_REG_CR1,
111 HPPA_REG_CR2,
112 HPPA_REG_CR3,
113 HPPA_REG_CR4,
114 HPPA_REG_CR5,
115 HPPA_REG_CR6,
116 HPPA_REG_CR7,
117 HPPA_REG_CR8,
118 HPPA_REG_CR9,
119 HPPA_REG_CR10,
120 HPPA_REG_CR11,
121 HPPA_REG_CR12,
122 HPPA_REG_CR13,
123 HPPA_REG_CR14,
124 HPPA_REG_CR15,
125 HPPA_REG_CR16,
126 HPPA_REG_CR17,
127 HPPA_REG_CR18,
128 HPPA_REG_CR19,
129 HPPA_REG_CR20,
130 HPPA_REG_CR21,
131 HPPA_REG_CR22,
132 HPPA_REG_CR23,
133 HPPA_REG_CR24,
134 HPPA_REG_CR25,
135 HPPA_REG_CR26,
136 HPPA_REG_CR27,
137 HPPA_REG_CR28,
138 HPPA_REG_CR29,
139 HPPA_REG_CR30,
140 HPPA_REG_CR31,
141 
142 ///> Special floating point exception registers
143 HPPA_REG_FPE0,
144 HPPA_REG_FPE1,
145 HPPA_REG_FPE2,
146 HPPA_REG_FPE3,
147 HPPA_REG_FPE4,
148 HPPA_REG_FPE5,
149 HPPA_REG_FPE6,
150 HPPA_REG_FPE7,
151 HPPA_REG_FPE8,
152 HPPA_REG_FPE9,
153 HPPA_REG_FPE10,
154 HPPA_REG_FPE11,
155 HPPA_REG_FPE12,
156 HPPA_REG_FPE13,
157 HPPA_REG_FPE14,
158 HPPA_REG_FPE15,
159 HPPA_REG_FPE16,
160 HPPA_REG_FPE17,
161 HPPA_REG_FPE18,
162 HPPA_REG_FPE19,
163 HPPA_REG_FPE20,
164 HPPA_REG_FPE21,
165 HPPA_REG_FPE22,
166 HPPA_REG_FPE23,
167 HPPA_REG_FPE24,
168 HPPA_REG_FPE25,
169 HPPA_REG_FPE26,
170 HPPA_REG_FPE27,
171 HPPA_REG_FPE28,
172 HPPA_REG_FPE29,
173 HPPA_REG_FPE30,
174 HPPA_REG_FPE31,
175 
176 ///> Single-precision floating point registers
177 HPPA_REG_SP_FPR0,
178 HPPA_REG_SP_FPR1,
179 HPPA_REG_SP_FPR2,
180 HPPA_REG_SP_FPR3,
181 HPPA_REG_SP_FPR4,
182 HPPA_REG_SP_FPR5,
183 HPPA_REG_SP_FPR6,
184 HPPA_REG_SP_FPR7,
185 HPPA_REG_SP_FPR8,
186 HPPA_REG_SP_FPR9,
187 HPPA_REG_SP_FPR10,
188 HPPA_REG_SP_FPR11,
189 HPPA_REG_SP_FPR12,
190 HPPA_REG_SP_FPR13,
191 HPPA_REG_SP_FPR14,
192 HPPA_REG_SP_FPR15,
193 HPPA_REG_SP_FPR16,
194 HPPA_REG_SP_FPR17,
195 HPPA_REG_SP_FPR18,
196 HPPA_REG_SP_FPR19,
197 HPPA_REG_SP_FPR20,
198 HPPA_REG_SP_FPR21,
199 HPPA_REG_SP_FPR22,
200 HPPA_REG_SP_FPR23,
201 HPPA_REG_SP_FPR24,
202 HPPA_REG_SP_FPR25,
203 HPPA_REG_SP_FPR26,
204 HPPA_REG_SP_FPR27,
205 HPPA_REG_SP_FPR28,
206 HPPA_REG_SP_FPR29,
207 HPPA_REG_SP_FPR30,
208 HPPA_REG_SP_FPR31,
209 
210 HPPA_REG_ENDING,
211} hppa_reg;
212 
213/// HPPA instruction
214typedef enum hppa_insn {
215 HPPA_INS_INVALID = 0,
216 
217 HPPA_INS_ADD,
218 HPPA_INS_ADDI,
219 HPPA_INS_ADDIO,
220 HPPA_INS_ADDIT,
221 HPPA_INS_ADDITO,
222 HPPA_INS_ADDB,
223 HPPA_INS_ADDBT,
224 HPPA_INS_ADDBF,
225 HPPA_INS_ADDIB,
226 HPPA_INS_ADDIBT,
227 HPPA_INS_ADDIBF,
228 HPPA_INS_ADDIL,
229 HPPA_INS_ADDC,
230 HPPA_INS_ADDCO,
231 HPPA_INS_ADDL,
232 HPPA_INS_ADDO,
233 HPPA_INS_AND,
234 HPPA_INS_ANDCM,
235 HPPA_INS_B,
236 HPPA_INS_BB,
237 HPPA_INS_BE,
238 HPPA_INS_BL,
239 HPPA_INS_BLE,
240 HPPA_INS_BLR,
241 HPPA_INS_BREAK,
242 HPPA_INS_BV,
243 HPPA_INS_BVB,
244 HPPA_INS_BVE,
245 HPPA_INS_CALL,
246 HPPA_INS_CLDD,
247 HPPA_INS_CLDDS,
248 HPPA_INS_CLDDX,
249 HPPA_INS_CLDW,
250 HPPA_INS_CLDWS,
251 HPPA_INS_CLDWX,
252 HPPA_INS_CLRBTS,
253 HPPA_INS_CMPB,
254 HPPA_INS_CMPCLR,
255 HPPA_INS_CMPIB,
256 HPPA_INS_CMPICLR,
257 HPPA_INS_COMB,
258 HPPA_INS_COMBT,
259 HPPA_INS_COMBF,
260 HPPA_INS_COMCLR,
261 HPPA_INS_COMIB,
262 HPPA_INS_COMIBT,
263 HPPA_INS_COMIBF,
264 HPPA_INS_COMICLR,
265 HPPA_INS_COPR,
266 HPPA_INS_COPY,
267 HPPA_INS_CSTD,
268 HPPA_INS_CSTDS,
269 HPPA_INS_CSTDX,
270 HPPA_INS_CSTW,
271 HPPA_INS_CSTWS,
272 HPPA_INS_CSTWX,
273 HPPA_INS_DCOR,
274 HPPA_INS_DEP,
275 HPPA_INS_DEPI,
276 HPPA_INS_DEPD,
277 HPPA_INS_DEPDI,
278 HPPA_INS_DEPW,
279 HPPA_INS_DEPWI,
280 HPPA_INS_DIAG,
281 HPPA_INS_DS,
282 HPPA_INS_EXTRD,
283 HPPA_INS_EXTRS,
284 HPPA_INS_EXTRU,
285 HPPA_INS_EXTRW,
286 HPPA_INS_FABS,
287 HPPA_INS_FADD,
288 HPPA_INS_FCMP,
289 HPPA_INS_FCNV,
290 HPPA_INS_FCNVFF,
291 HPPA_INS_FCNVFX,
292 HPPA_INS_FCNVFXT,
293 HPPA_INS_FCNVXF,
294 HPPA_INS_FCPY,
295 HPPA_INS_FDC,
296 HPPA_INS_FDCE,
297 HPPA_INS_FDIV,
298 HPPA_INS_FIC,
299 HPPA_INS_FICE,
300 HPPA_INS_FID,
301 HPPA_INS_FLDD,
302 HPPA_INS_FLDDS,
303 HPPA_INS_FLDDX,
304 HPPA_INS_FLDW,
305 HPPA_INS_FLDWS,
306 HPPA_INS_FLDWX,
307 HPPA_INS_FMPY,
308 HPPA_INS_FMPYADD,
309 HPPA_INS_FMPYFADD,
310 HPPA_INS_FMPYNFADD,
311 HPPA_INS_FMPYSUB,
312 HPPA_INS_FNEG,
313 HPPA_INS_FNEGABS,
314 HPPA_INS_FREM,
315 HPPA_INS_FRND,
316 HPPA_INS_FSQRT,
317 HPPA_INS_FSTD,
318 HPPA_INS_FSTDS,
319 HPPA_INS_FSTDX,
320 HPPA_INS_FSTW,
321 HPPA_INS_FSTWS,
322 HPPA_INS_FSTWX,
323 HPPA_INS_FSTQS,
324 HPPA_INS_FSTQX,
325 HPPA_INS_FSUB,
326 HPPA_INS_FTEST,
327 HPPA_INS_GATE,
328 HPPA_INS_GFR,
329 HPPA_INS_GFW,
330 HPPA_INS_GRSHDW,
331 HPPA_INS_HADD,
332 HPPA_INS_HAVG,
333 HPPA_INS_HSHL,
334 HPPA_INS_HSHLADD,
335 HPPA_INS_HSHR,
336 HPPA_INS_HSHRADD,
337 HPPA_INS_HSUB,
338 HPPA_INS_IDTLBA,
339 HPPA_INS_IDTLBP,
340 HPPA_INS_IDTLBT,
341 HPPA_INS_IDCOR,
342 HPPA_INS_IITLBA,
343 HPPA_INS_IITLBP,
344 HPPA_INS_IITLBT,
345 HPPA_INS_LCI,
346 HPPA_INS_LDB,
347 HPPA_INS_LDBS,
348 HPPA_INS_LDBX,
349 HPPA_INS_LDCD,
350 HPPA_INS_LDCW,
351 HPPA_INS_LDCWS,
352 HPPA_INS_LDCWX,
353 HPPA_INS_LDD,
354 HPPA_INS_LDDA,
355 HPPA_INS_LDH,
356 HPPA_INS_LDHS,
357 HPPA_INS_LDHX,
358 HPPA_INS_LDI,
359 HPPA_INS_LDIL,
360 HPPA_INS_LDO,
361 HPPA_INS_LDSID,
362 HPPA_INS_LDW,
363 HPPA_INS_LDWA,
364 HPPA_INS_LDWAS,
365 HPPA_INS_LDWAX,
366 HPPA_INS_LDWM,
367 HPPA_INS_LDWS,
368 HPPA_INS_LDWX,
369 HPPA_INS_LPA,
370 HPPA_INS_MFCPU,
371 HPPA_INS_MFCTL,
372 HPPA_INS_MFIA,
373 HPPA_INS_MFSP,
374 HPPA_INS_MIXH,
375 HPPA_INS_MIXW,
376 HPPA_INS_MOVB,
377 HPPA_INS_MOVIB,
378 HPPA_INS_MTCPU,
379 HPPA_INS_MTCTL,
380 HPPA_INS_MTSAR,
381 HPPA_INS_MTSARCM,
382 HPPA_INS_MTSM,
383 HPPA_INS_MTSP,
384 HPPA_INS_NOP,
385 HPPA_INS_OR,
386 HPPA_INS_PDC,
387 HPPA_INS_PDTLB,
388 HPPA_INS_PDTLBE,
389 HPPA_INS_PERMH,
390 HPPA_INS_PITLB,
391 HPPA_INS_PITLBE,
392 HPPA_INS_PMDIS,
393 HPPA_INS_PMENB,
394 HPPA_INS_POPBTS,
395 HPPA_INS_PROBE,
396 HPPA_INS_PROBEI,
397 HPPA_INS_PROBER,
398 HPPA_INS_PROBERI,
399 HPPA_INS_PROBEW,
400 HPPA_INS_PROBEWI,
401 HPPA_INS_PUSHBTS,
402 HPPA_INS_PUSHNOM,
403 HPPA_INS_RET,
404 HPPA_INS_RFI,
405 HPPA_INS_RFIR,
406 HPPA_INS_RSM,
407 HPPA_INS_SHDWGR,
408 HPPA_INS_SHLADD,
409 HPPA_INS_SH1ADD,
410 HPPA_INS_SH1ADDL,
411 HPPA_INS_SH1ADDO,
412 HPPA_INS_SH2ADD,
413 HPPA_INS_SH2ADDL,
414 HPPA_INS_SH2ADDO,
415 HPPA_INS_SH3ADD,
416 HPPA_INS_SH3ADDL,
417 HPPA_INS_SH3ADDO,
418 HPPA_INS_SHD,
419 HPPA_INS_SHRPD,
420 HPPA_INS_SHRPW,
421 HPPA_INS_SPOP0,
422 HPPA_INS_SPOP1,
423 HPPA_INS_SPOP2,
424 HPPA_INS_SPOP3,
425 HPPA_INS_SSM,
426 HPPA_INS_STB,
427 HPPA_INS_STBS,
428 HPPA_INS_STBY,
429 HPPA_INS_STBYS,
430 HPPA_INS_STD,
431 HPPA_INS_STDA,
432 HPPA_INS_STDBY,
433 HPPA_INS_STH,
434 HPPA_INS_STHS,
435 HPPA_INS_STW,
436 HPPA_INS_STWA,
437 HPPA_INS_STWAS,
438 HPPA_INS_STWS,
439 HPPA_INS_STWM,
440 HPPA_INS_SUB,
441 HPPA_INS_SUBB,
442 HPPA_INS_SUBBO,
443 HPPA_INS_SUBI,
444 HPPA_INS_SUBIO,
445 HPPA_INS_SUBO,
446 HPPA_INS_SUBT,
447 HPPA_INS_SUBTO,
448 HPPA_INS_SYNC,
449 HPPA_INS_SYNCDMA,
450 HPPA_INS_TOCDIS,
451 HPPA_INS_TOCEN,
452 HPPA_INS_UADDCM,
453 HPPA_INS_UADDCMT,
454 HPPA_INS_UXOR,
455 HPPA_INS_VDEP,
456 HPPA_INS_VDEPI,
457 HPPA_INS_VEXTRS,
458 HPPA_INS_VEXTRU,
459 HPPA_INS_VSHD,
460 HPPA_INS_XMPYU,
461 HPPA_INS_XOR,
462 HPPA_INS_ZDEP,
463 HPPA_INS_ZDEPI,
464 HPPA_INS_ZVDEP,
465 HPPA_INS_ZVDEPI,
466 
467 HPPA_INS_ENDING
468} hppa_insn;
469 
470/// HPPA space select operand
471typedef struct hppa_mem {
472 hppa_reg base;
473 hppa_reg space;
474 cs_ac_type base_access;
475} hppa_mem;
476 
477// Instruction operand
478typedef struct cs_hppa_op {
479 hppa_op_type type; ///< operand type
480 union {
481 hppa_reg reg; ///< register value for REG operand
482 int64_t imm; ///< immediate value for IMM operand
483 hppa_mem mem;
484 };
485 cs_ac_type access;
486} cs_hppa_op;
487 
488// Instruction structure
489typedef struct cs_hppa {
490 // Number of operands of this instruction,
491 // or 0 when instruction has no operand.
492 uint8_t op_count;
493 cs_hppa_op operands[NUM_HPPA_OPS]; ///< operands for hppa instruction.
494} cs_hppa;
495 
496/// HPPA modifiers type. Can be string (most of them) or int (uid, sop)
497typedef enum hppa_modifier_type {
498 HPPA_MOD_STR = 0,
499 HPPA_MOD_INT = 1
500} hppa_modifier_type;
501 
502/// hppa string/integer modifier
503typedef struct hppa_modifier {
504 hppa_modifier_type type;
505 union {
506 char str_mod[HPPA_STR_MODIFIER_LEN];
507 uint32_t int_mod;
508 };
509 
510} hppa_modifier;
511 
512// Additional instruction info
513typedef struct hppa_ext {
514 hppa_modifier modifiers[HPPA_MAX_MODIFIERS_LEN]; ///< instruction modifiers array
515 uint8_t mod_num; ///< number of modifiers of current instruction
516 bool b_writeble; ///< true if some load/store modifier has modify base register bit
517 bool is_alternative; ///< true if some modifier affects instruction format
518} hppa_ext;
519 
520// Group of HPPA instructions
521typedef enum hppa_insn_group {
522 HPPA_GRP_INVALID = 0, ///< = CS_GRP_INVALID
523 
524 HPPA_GRP_COMPUTATION = 128,
525 HPPA_GRP_MULTIMEDIA,
526 HPPA_GRP_MEM_REF,
527 HPPA_GRP_LONG_IMM,
528 HPPA_GRP_BRANCH,
529 HPPA_GRP_SYSCTRL,
530 HPPA_GRP_ASSIST,
531 HPPA_GRP_FLOAT,
532 HPPA_GRP_PERFMON,
533 
534 HPPA_GRP_ENDING,
535} hppa_insn_group;
536 
537#ifdef __cplusplus
538}
539#endif
540 
541#endif
542