7 #include <capstone/capstone.h>
15 cs_regs regs_read, regs_write;
16 uint8_t regs_read_count, regs_write_count;
20 if (ins->detail ==
NULL)
23 arm64 = &(ins->detail->arm64);
27 for (
i = 0;
i <
arm64->op_count;
i++) {
39 #if defined(_KERNEL_MODE)
41 printf(
"\t\toperands[%u].type: FP = <float_point_unsupported>\n",
i);
43 printf(
"\t\toperands[%u].type: FP = %f\n",
i,
op->fp);
47 printf(
"\t\toperands[%u].type: MEM\n",
i);
52 if (
op->mem.disp != 0)
53 printf(
"\t\t\toperands[%u].mem.disp: 0x%x\n",
i,
op->mem.disp);
57 printf(
"\t\toperands[%u].type: C-IMM = %u\n",
i, (
int)
op->imm);
60 printf(
"\t\toperands[%u].type: REG_MRS = 0x%x\n",
i,
op->reg);
63 printf(
"\t\toperands[%u].type: REG_MSR = 0x%x\n",
i,
op->reg);
66 printf(
"\t\toperands[%u].type: PSTATE = 0x%x\n",
i,
op->pstate);
69 printf(
"\t\toperands[%u].type: SYS = 0x%x\n",
i,
op->sys);
72 printf(
"\t\toperands[%u].type: PREFETCH = 0x%x\n",
i,
op->prefetch);
75 printf(
"\t\toperands[%u].type: BARRIER = 0x%x\n",
i,
op->barrier);
84 printf(
"\t\toperands[%u].access: READ\n",
i);
87 printf(
"\t\toperands[%u].access: WRITE\n",
i);
90 printf(
"\t\toperands[%u].access: READ | WRITE\n",
i);
96 printf(
"\t\t\tShift: type = %u, value = %u\n",
97 op->shift.type,
op->shift.value);
103 printf(
"\t\t\tVector Arrangement Specifier: 0x%x\n",
op->vas);
106 printf(
"\t\t\tVector Element Size Specifier: %u\n",
op->vess);
108 if (
op->vector_index != -1)
109 printf(
"\t\t\tVector Index: %u\n",
op->vector_index);
112 if (
arm64->update_flags)
113 printf(
"\tUpdate-flags: True\n");
115 if (
arm64->writeback)
116 printf(
"\tWrite-back: True\n");
123 regs_read, ®s_read_count,
124 regs_write, ®s_write_count)) {
125 if (regs_read_count) {
126 printf(
"\tRegisters read:");
127 for(
i = 0;
i < regs_read_count;
i++) {
133 if (regs_write_count) {
134 printf(
"\tRegisters modified:");
135 for(
i = 0;
i < regs_write_count;
i++) {
static mcore_handle handle
@ ARM64_OP_FP
= CS_OP_FP (Floating-Point operand).
@ ARM64_OP_PSTATE
PState operand.
@ ARM64_OP_BARRIER
Memory barrier operand (ISB/DMB/DSB instructions).
@ ARM64_OP_REG
= CS_OP_REG (Register operand).
@ ARM64_OP_PREFETCH
Prefetch operand (PRFM).
@ ARM64_OP_MEM
= CS_OP_MEM (Memory operand).
@ ARM64_OP_SYS
SYS operand for IC/DC/AT/TLBI instructions.
@ ARM64_OP_REG_MRS
MRS register operand.
@ ARM64_OP_CIMM
C-Immediate.
@ ARM64_OP_IMM
= CS_OP_IMM (Immediate operand).
@ ARM64_OP_REG_MSR
MSR register operand.
@ CS_AC_READ
Operand read from memory or register.
@ CS_AC_WRITE
Operand write to memory or register.
CAPSTONE_EXPORT cs_err CAPSTONE_API cs_regs_access(csh ud, const cs_insn *insn, cs_regs regs_read, uint8_t *regs_read_count, cs_regs regs_write, uint8_t *regs_write_count)
CAPSTONE_EXPORT const char *CAPSTONE_API cs_reg_name(csh ud, unsigned int reg)
_Use_decl_annotations_ int __cdecl printf(const char *const _Format,...)
static static fork const void static count static fd const char static mode const char static pathname const char static path const char static dev const char static group static getpid static getuid void void static data static pause access