aboutsummaryrefslogtreecommitdiffstats
path: root/capstone/cstool/cstool_wasm.c
diff options
context:
space:
mode:
Diffstat (limited to 'capstone/cstool/cstool_wasm.c')
-rw-r--r--capstone/cstool/cstool_wasm.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/capstone/cstool/cstool_wasm.c b/capstone/cstool/cstool_wasm.c
new file mode 100644
index 000000000..80bb2b912
--- /dev/null
+++ b/capstone/cstool/cstool_wasm.c
@@ -0,0 +1,51 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <capstone/capstone.h>
+
+void print_insn_detail_wasm(csh handle, cs_insn *ins);
+
+void print_insn_detail_wasm(csh handle, cs_insn *ins)
+{
+ cs_wasm *wasm;
+
+ // detail can be NULL on "data" instruction if SKIPDATA option is turned ON
+ if (ins->detail == NULL)
+ return;
+
+ wasm = &(ins->detail->wasm);
+ if (wasm->op_count > 0) {
+ unsigned int i;
+
+ printf("\tOperand count: %d\n", wasm->op_count);
+
+ for (i = 0; i < wasm->op_count; i++) {
+ switch (wasm->operands[i].type) {
+ default:
+ break;
+ case WASM_OP_INT7:
+ printf("\t\tOperand[%u] type: int7\n", i);
+ printf("\t\tOperand[%u] value: %d\n", i, wasm->operands[i].int7);
+ break;
+ case WASM_OP_UINT32:
+ printf("\t\tOperand[%u] type: uint32\n", i);
+ printf("\t\tOperand[%u] value: 0x%x\n", i, wasm->operands[i].uint32);
+ break;
+ case WASM_OP_UINT64:
+ printf("\t\tOperand[%u] type: uint64\n", i);
+ printf("\t\tOperand[%u] value: 0x%" PRIx64 "\n", i, wasm->operands[i].uint64);
+ break;
+ case WASM_OP_VARUINT32:
+ printf("\t\tOperand[%u] type: varuint32\n", i);
+ printf("\t\tOperand[%u] value: 0x%x\n", i, wasm->operands[i].varuint32);
+ break;
+ case WASM_OP_VARUINT64:
+ printf("\t\tOperand[%u] type: varuint64\n", i);
+ printf("\t\tOperand[%u] value: 0x%" PRIx64 "\n", i, wasm->operands[i].varuint64);
+ break;
+ }
+
+ printf("\t\tOperand[%u] size: %u\n", i, wasm->operands[i].size);
+ }
+ }
+}