mirror of
https://github.com/radareorg/radare2.git
synced 2025-02-04 04:28:20 +00:00
* Show conditions in decode mode
* Fix bug with imm=0 in r_anal_value_to_string() * Add 32bits regs to the anal_x86 profile * Add r_anal_bb_from_offset()
This commit is contained in:
parent
d052225122
commit
c712fd87f6
@ -92,3 +92,14 @@ R_API int r_anal_bb(RAnal *anal, RAnalBlock *bb, ut64 addr, ut8 *buf, ut64 len,
|
||||
}
|
||||
return bb->size;
|
||||
}
|
||||
|
||||
R_API RAnalBlock *r_anal_bb_from_offset(RAnal *anal, ut64 off) {
|
||||
RListIter *iter, *iter2;
|
||||
RAnalFcn *fcn;
|
||||
RAnalBlock *bb;
|
||||
r_list_foreach (anal->fcns, iter, fcn)
|
||||
r_list_foreach (fcn->bbs, iter2, bb)
|
||||
if (off >= bb->addr && off < bb->addr + bb->size)
|
||||
return bb;
|
||||
return NULL;
|
||||
}
|
||||
|
@ -75,9 +75,14 @@ R_API char *r_anal_op_to_string(RAnal *anal, RAnalOp *op) {
|
||||
snprintf (ret, retsz, "%s = %s", r0, a0);
|
||||
break;
|
||||
case R_ANAL_OP_TYPE_CJMP:
|
||||
cstr = r_anal_cond_to_string (op->cond);
|
||||
snprintf (ret, retsz, "if (%s) goto 0x%"PFMT64x, cstr, op->jump);
|
||||
free (cstr);
|
||||
{
|
||||
RAnalBlock *bb = r_anal_bb_from_offset (anal, op->addr);
|
||||
if (bb) {
|
||||
cstr = r_anal_cond_to_string (bb->cond);
|
||||
snprintf (ret, retsz, "if (%s) goto 0x%"PFMT64x, cstr, op->jump);
|
||||
free (cstr);
|
||||
} else snprintf (ret, retsz, "if (%s) goto 0x%"PFMT64x, "unk", op->jump);
|
||||
}
|
||||
break;
|
||||
case R_ANAL_OP_TYPE_JMP:
|
||||
snprintf (ret, retsz, "goto 0x%"PFMT64x, op->jump);
|
||||
@ -128,9 +133,15 @@ R_API char *r_anal_op_to_string(RAnal *anal, RAnalOp *op) {
|
||||
snprintf (ret, retsz, "%s ^= %s", r0, a0);
|
||||
else snprintf (ret, retsz, "%s = %s ^ %s", r0, a0, a1);
|
||||
break;
|
||||
case R_ANAL_OP_TYPE_CMP:
|
||||
ret[0] = '\0';
|
||||
break;
|
||||
case R_ANAL_OP_TYPE_NOP:
|
||||
sprintf (ret, "nop");
|
||||
break;
|
||||
case R_ANAL_OP_TYPE_RET:
|
||||
sprintf (ret, "ret");
|
||||
break;
|
||||
default:
|
||||
sprintf (ret, "// ?");
|
||||
break;
|
||||
|
@ -985,15 +985,21 @@ static int set_reg_profile(RAnal *anal) {
|
||||
"gpr rbp .64 32 0\n"
|
||||
"gpr ebp .32 32 0\n"
|
||||
"gpr rbx .64 40 0\n"
|
||||
"gpr ebx .32 40 0\n"
|
||||
"gpr r11 .64 48 0\n"
|
||||
"gpr r10 .64 56 0\n"
|
||||
"gpr r9 .64 64 0\n"
|
||||
"gpr r8 .64 72 0\n"
|
||||
"gpr rax .64 80 0\n"
|
||||
"gpr eax .32 80 0\n"
|
||||
"gpr rcx .64 88 0\n"
|
||||
"gpr ecx .32 88 0\n"
|
||||
"gpr rdx .64 96 0\n"
|
||||
"gpr edx .32 96 0\n"
|
||||
"gpr rsi .64 104 0\n"
|
||||
"gpr esi .32 104 0\n"
|
||||
"gpr rdi .64 112 0\n"
|
||||
"gpr edi .32 112 0\n"
|
||||
"gpr oeax .64 120 0\n"
|
||||
"gpr rip .64 128 0\n"
|
||||
"seg cs .64 136 0\n"
|
||||
|
@ -60,7 +60,7 @@ R_API char *r_anal_value_to_string (RAnalValue *value) {
|
||||
char *out = NULL;
|
||||
if (value) {
|
||||
out = r_str_new ("");
|
||||
if (value->imm) {
|
||||
if (!value->base && !value->reg) {
|
||||
if (value->imm != -1LL)
|
||||
out = r_str_concatf (out, "0x%"PFMT64x, value->imm);
|
||||
else out = r_str_concat (out, "-1");
|
||||
|
@ -347,6 +347,7 @@ R_API RList *r_anal_bb_list_new();
|
||||
R_API void r_anal_bb_free(void *bb);
|
||||
R_API int r_anal_bb(RAnal *anal, RAnalBlock *bb,
|
||||
ut64 addr, ut8 *buf, ut64 len, int head);
|
||||
R_API RAnalBlock *r_anal_bb_from_offset(RAnal *anal, ut64 off);
|
||||
|
||||
/* op.c */
|
||||
R_API RAnalOp *r_anal_op_new();
|
||||
|
Loading…
x
Reference in New Issue
Block a user