static int disassemble(RAsm *a, RAsmOp *op, const ut8 *buf, int len) { static struct disassemble_info disasm_obj; if (len < 2) { return -1; } buf_global = &op->buf_asm; Offset = a->pc; memcpy (bytes, buf, 2); /* prepare disassembler */ memset (&disasm_obj,'\0', sizeof (struct disassemble_info)); disasm_obj.buffer = bytes; disasm_obj.read_memory_func = &sh_buffer_read_memory; disasm_obj.symbol_at_address_func = &symbol_at_address; disasm_obj.memory_error_func = &memory_error_func; disasm_obj.print_address_func = &generic_print_address_func; disasm_obj.endian = !a->big_endian; disasm_obj.fprintf_func = &generic_fprintf_func; disasm_obj.stream = stdout; if (disasm_obj.endian == BFD_ENDIAN_BIG) { op->size = print_insn_shb ((bfd_vma)Offset, &disasm_obj); } else { op->size = print_insn_shl ((bfd_vma)Offset, &disasm_obj); } if (op->size == -1) { r_asm_op_set_asm (op, "(data)"); } return op->size; }
static int disassemble(RAsm *a, RAsmOp *op, const ut8 *buf, int len) { static struct disassemble_info disasm_obj; if (len<2) return -1; buf_global = op->buf_asm; Offset = a->pc; memcpy (bytes, buf, 2); /* prepare disassembler */ memset (&disasm_obj,'\0', sizeof (struct disassemble_info)); disasm_obj.buffer = bytes; disasm_obj.read_memory_func = &sh_buffer_read_memory; disasm_obj.symbol_at_address_func = &symbol_at_address; disasm_obj.memory_error_func = &memory_error_func; disasm_obj.print_address_func = &print_address; disasm_obj.endian = !a->big_endian; disasm_obj.fprintf_func = &buf_fprintf; disasm_obj.stream = stdout; op->buf_asm[0] = '\0'; if (a->big_endian) op->size = print_insn_shb ((bfd_vma)Offset, &disasm_obj); else op->size = print_insn_shl ((bfd_vma)Offset, &disasm_obj); if (op->size == -1) strncpy (op->buf_asm, " (data)", R_ASM_BUFSIZE); return op->size; }