/* Compute the len and the starting address * when disassembling `nb` opcodes backward. */ R_API ut32 r_core_asm_bwdis_len (RCore* core, int* instr_len, ut64* start_addr, ut32 nb) { ut32 instr_run = 0; RCoreAsmHit *hit; RListIter *iter = NULL; RList* hits = r_core_asm_bwdisassemble (core, core->offset, nb, core->blocksize); if (instr_len) *instr_len = 0; if (hits && r_list_length (hits) > 0) { hit = r_list_get_bottom (hits); if (start_addr) *start_addr = hit->addr; r_list_foreach (hits, iter, hit) instr_run += hit->len; if (instr_len) *instr_len = instr_run; } r_list_free (hits); return instr_run; }
/* Compute the len and the starting address * when disassembling `nb` opcodes backward. */ R_API ut32 r_core_asm_bwdis_len(RCore* core, int* instr_len, ut64* start_addr, ut32 nb) { ut32 instr_run = 0; RCoreAsmHit *hit; RListIter *iter = NULL; // TODO if length of nb instructions is larger than blocksize RList* hits = r_core_asm_bwdisassemble (core, core->offset, nb, core->blocksize); if (instr_len) { *instr_len = 0; } if (hits && r_list_length (hits) > 0) { hit = r_list_get_bottom (hits); if (start_addr) { *start_addr = hit->addr; } r_list_foreach (hits, iter, hit) { instr_run += hit->len; } if (instr_len) { *instr_len = instr_run; } }