6 #include <capstone/capstone.h>
9 #define CAPSTONE_HAS_M68K 1
11 #define CAPSTONE_HAS_M68K 0
13 #pragma message("Cannot find capstone-m68k support")
15 #warning Cannot find capstone-m68k support
22 #define M68K_LONGEST_INSTRUCTION 10
29 const char *buf_asm =
NULL;
30 static int omode = -1;
31 static int obits = 32;
35 if (
mode != omode ||
a->bits != obits) {
43 if (
a->cpu && strstr(
a->cpu,
"68000")) {
46 if (
a->cpu && strstr(
a->cpu,
"68010")) {
49 if (
a->cpu && strstr(
a->cpu,
"68020")) {
52 if (
a->cpu && strstr(
a->cpu,
"68030")) {
55 if (
a->cpu && strstr(
a->cpu,
"68040")) {
58 if (
a->cpu && strstr(
a->cpu,
"68060")) {
71 if (
a->features && *
a->features) {
80 ut8 mybuf[M68K_LONGEST_INSTRUCTION] = { 0 };
81 int mylen =
RZ_MIN(M68K_LONGEST_INSTRUCTION,
len);
96 if (
a->features && *
a->features) {
99 op->size = insn->size;
104 if (
op && !
op->size) {
105 op->size = insn->size;
106 buf_asm =
sdb_fmt(
"%s%s%s", insn->mnemonic, insn->op_str[0] ?
" " :
"", insn->op_str);
120 if (!strncmp(buf_asm,
"dc.w", 4)) {
130 .desc =
"Capstone M68K disassembler",
131 .cpus =
"68000,68010,68020,68030,68040,68060",
145 #ifndef RZ_PLUGIN_INCORE
155 .
name =
"m68k.cs (unsupported)",
156 .desc =
"Capstone M68K disassembler (unsupported)",
164 #ifndef RZ_PLUGIN_INCORE
RZ_API void rz_asm_op_set_asm(RzAsmOp *op, const char *str)
static int disassemble(RzAsm *a, RzAsmOp *op, const ut8 *buf, int len)
static bool check_features(RzAsm *a, cs_insn *insn)
RZ_API RzLibStruct rizin_plugin
RzAsmPlugin rz_asm_plugin_m68k_cs
@ CS_ARCH_M68K
68K architecture
@ CS_MODE_M68K_040
M68K 68040 mode.
@ CS_MODE_M68K_000
M68K 68000 mode.
@ CS_MODE_M68K_060
M68K 68060 mode.
@ CS_MODE_M68K_010
M68K 68010 mode.
@ CS_MODE_BIG_ENDIAN
big-endian mode
@ CS_MODE_M68K_020
M68K 68020 mode.
@ CS_MODE_M68K_030
M68K 68030 mode.
@ CS_MODE_LITTLE_ENDIAN
little-endian mode (default mode)
@ CS_OPT_DETAIL
Break down instruction structure into details.
@ CS_OPT_ON
Turn ON an option (CS_OPT_DETAIL, CS_OPT_SKIPDATA).
@ CS_OPT_OFF
Turn OFF an option - default for CS_OPT_DETAIL, CS_OPT_SKIPDATA, CS_OPT_UNSIGNED.
CAPSTONE_EXPORT size_t CAPSTONE_API cs_disasm(csh ud, const uint8_t *buffer, size_t size, uint64_t offset, size_t count, cs_insn **insn)
CAPSTONE_EXPORT cs_err CAPSTONE_API cs_open(cs_arch arch, cs_mode mode, csh *handle)
CAPSTONE_EXPORT void CAPSTONE_API cs_free(cs_insn *insn, size_t count)
CAPSTONE_EXPORT cs_err CAPSTONE_API cs_close(csh *handle)
CAPSTONE_EXPORT cs_err CAPSTONE_API cs_option(csh ud, cs_opt_type type, size_t value)
RZ_API char * sdb_fmt(const char *fmt,...)
RZ_API void Ht_() free(HtName_(Ht) *ht)
memcpy(mem, inblock.get(), min(CONTAINING_RECORD(inblock.get(), MEMBLOCK, data) ->size, size))
return strdup("=SP r13\n" "=LR r14\n" "=PC r15\n" "=A0 r0\n" "=A1 r1\n" "=A2 r2\n" "=A3 r3\n" "=ZF zf\n" "=SF nf\n" "=OF vf\n" "=CF cf\n" "=SN or0\n" "gpr lr .32 56 0\n" "gpr pc .32 60 0\n" "gpr cpsr .32 64 0 ____tfiae_________________qvczn\n" "gpr or0 .32 68 0\n" "gpr tf .1 64.5 0 thumb\n" "gpr ef .1 64.9 0 endian\n" "gpr jf .1 64.24 0 java\n" "gpr qf .1 64.27 0 sticky_overflow\n" "gpr vf .1 64.28 0 overflow\n" "gpr cf .1 64.29 0 carry\n" "gpr zf .1 64.30 0 zero\n" "gpr nf .1 64.31 0 negative\n" "gpr itc .4 64.10 0 if_then_count\n" "gpr gef .4 64.16 0 great_or_equal\n" "gpr r0 .32 0 0\n" "gpr r1 .32 4 0\n" "gpr r2 .32 8 0\n" "gpr r3 .32 12 0\n" "gpr r4 .32 16 0\n" "gpr r5 .32 20 0\n" "gpr r6 .32 24 0\n" "gpr r7 .32 28 0\n" "gpr r8 .32 32 0\n" "gpr r9 .32 36 0\n" "gpr r10 .32 40 0\n" "gpr r11 .32 44 0\n" "gpr r12 .32 48 0\n" "gpr r13 .32 52 0\n" "gpr r14 .32 56 0\n" "gpr r15 .32 60 0\n" "gpr r16 .32 64 0\n" "gpr r17 .32 68 0\n")
RZ_API char * rz_str_replace(char *str, const char *key, const char *val, int g)
RZ_API int rz_str_replace_char(char *s, int a, int b)
#define RZ_SYS_ENDIAN_BIG
static const char * mnemonics[]