7 #include "../../asm/arch/avr/disassembler.h"
8 #include "../arch/avr/avr_esil.h"
9 #include "../arch/avr/avr_il.h"
28 op->fail =
op->addr + 2;
36 AVROp next_op = { 0 };
52 }
else if (!strcmp(
op->mnemonic,
"invalid")) {
145 op->val =
op->mmio_address = aop.
param[1];
172 op->val =
op->mmio_address = aop.
param[0];
320 "gpr rampx .8 39 0\n"
321 "gpr rampy .8 40 0\n"
322 "gpr rampz .8 41 0\n"
323 "gpr rampd .8 42 0\n"
341 "gpr _prog .32 44 0\n"
342 "gpr _page .32 48 0\n"
343 "gpr _eeprom .32 52 0\n"
344 "gpr _ram .32 56 0\n"
346 "gpr _sram .32 60 0\n"
350 "gpr spmcsr .8 64 0\n";
371 if (opsize < 2 || !(ret =
malloc(opsize))) {
376 memset(ret, 0xff, opsize);
456 return bits == 8 ? 16 : -1;
461 .desc =
"AVR code analysis plugin",
476 #ifndef RZ_PLUGIN_INCORE
static void handle_skip_next_instruction(RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, bool big_endian, AVROp *aop)
static char * get_reg_profile(RzAnalysis *analysis)
static void set_invalid_op(RzAnalysisOp *op, ut64 addr)
static int avr_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len, RzAnalysisOpMask mask)
RZ_API RzLibStruct rizin_plugin
RzAnalysisPlugin rz_analysis_plugin_avr
static int address_bits(RzAnalysis *analysis, int bits)
static ut8 * analysis_mask_avr(RzAnalysis *analysis, int size, const ut8 *data, ut64 at)
static int archinfo(RzAnalysis *analysis, int q)
ut32 avr_disassembler(const ut8 *buffer, const ut32 size, ut64 pc, bool be, AVROp *aop, RzStrBuf *sb)
RZ_IPI int rz_avr_esil_fini(RzAnalysisEsil *esil)
RZ_IPI void rz_avr_esil_opcode(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *buf, int len)
RZ_IPI int rz_avr_esil_init(RzAnalysisEsil *esil)
RZ_IPI RzAnalysisILConfig * rz_avr_il_config(RZ_NONNULL RzAnalysis *analysis)
RZ_IPI bool rz_avr_il_opcode(RzAnalysis *analysis, RzAnalysisOp *op, ut64 pc, AVROp *aop, AVROp *next_op)
int bits(struct state *s, int need)
return memset(p, 0, total)
void * malloc(size_t 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 void rz_analysis_op_free(void *op)
@ RZ_ANALYSIS_OP_FAMILY_CRYPTO
@ RZ_ANALYSIS_OP_FAMILY_UNKNOWN
@ RZ_ANALYSIS_OP_FAMILY_PRIV
@ RZ_ANALYSIS_OP_FAMILY_CPU
@ RZ_ANALYSIS_OP_FAMILY_IO
#define RZ_ANALYSIS_ARCHINFO_MAX_OP_SIZE
@ RZ_ANALYSIS_OP_TYPE_ICALL
@ RZ_ANALYSIS_OP_TYPE_LOAD
@ RZ_ANALYSIS_OP_TYPE_CRYPTO
@ RZ_ANALYSIS_OP_TYPE_JMP
@ RZ_ANALYSIS_OP_TYPE_IJMP
@ RZ_ANALYSIS_OP_TYPE_NULL
@ RZ_ANALYSIS_OP_TYPE_TRAP
@ RZ_ANALYSIS_OP_TYPE_CALL
@ RZ_ANALYSIS_OP_TYPE_STORE
@ RZ_ANALYSIS_OP_TYPE_IRJMP
@ RZ_ANALYSIS_OP_TYPE_CJMP
@ RZ_ANALYSIS_OP_TYPE_MOV
@ RZ_ANALYSIS_OP_TYPE_ILL
@ RZ_ANALYSIS_OP_TYPE_RET
static void rz_write_ble16(void *dest, ut16 val, bool big_endian)
RZ_API RZ_OWN char * rz_strbuf_drain(RzStrBuf *sb)
RZ_API const char * rz_strbuf_set(RzStrBuf *sb, const char *s)
RZ_API void rz_strbuf_fini(RzStrBuf *sb)
RZ_API RzStrBuf * rz_strbuf_new(const char *s)
RZ_API void rz_strbuf_init(RzStrBuf *sb)
ut64(WINAPI *w32_GetEnabledXStateFeatures)()