Fix afvd using wrong var offsets (#17572)

This commit is contained in:
GustavoLCR 2020-09-02 08:49:14 -03:00 committed by GitHub
parent be39c822cf
commit 62eb8e62da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 5 deletions

View File

@ -30,8 +30,9 @@ R_API bool r_anal_var_display(RAnal *anal, RAnalVar *var) {
}
break;
case R_ANAL_VAR_KIND_BPV: {
ut32 udelta = R_ABS (var->delta + var->fcn->bp_off);
char sign = var->delta >= 0 ? '+' : '-';
const st32 real_delta = var->delta + var->fcn->bp_off;
const ut32 udelta = R_ABS (real_delta);
const char sign = real_delta >= 0 ? '+' : '-';
if (usePxr) {
anal->cb_printf ("pxr $w @%s%c0x%x\n", anal->reg->name[R_REG_NAME_BP], sign, udelta);
} else {
@ -39,14 +40,16 @@ R_API bool r_anal_var_display(RAnal *anal, RAnalVar *var) {
}
}
break;
case R_ANAL_VAR_KIND_SPV:
case R_ANAL_VAR_KIND_SPV: {
ut32 udelta = R_ABS (var->delta + var->fcn->maxstack);
if (usePxr) {
anal->cb_printf ("pxr $w @%s+0x%x\n", anal->reg->name[R_REG_NAME_SP], var->delta);
anal->cb_printf ("pxr $w @%s+0x%x\n", anal->reg->name[R_REG_NAME_SP], udelta);
} else {
anal->cb_printf ("pf %s @ %s+0x%x\n", fmt, anal->reg->name[R_REG_NAME_SP], var->delta);
anal->cb_printf ("pf %s @ %s+0x%x\n", fmt, anal->reg->name[R_REG_NAME_SP], udelta);
}
break;
}
}
free (fmt);
return true;
}

28
test/db/cmd/cmd_afvd Normal file
View File

@ -0,0 +1,28 @@
NAME=afvd
FILE=-
CMDS=<<EOF
e anal.vars.stackname=true
e asm.arch=x86
e asm.bits=64
wx 554889e54883ec2848897c24204889742418488995e0ffffff48898dd8ffffff4883c4285dc3
af
aei
aeim
dr rdi=0x1111111111111111
dr rsi=0x2222222222222222
dr rdx=0x3333333333333333
dr rcx=0x4444444444444444
7ds
afvd
EOF
EXPECT=<<EOF
arg arg1 = : rdi : 0x1111111111111111
arg arg2 = : rsi : 0x2222222222222222
arg arg3 = : rdx : 0x3333333333333333
arg arg4 = : rcx : 0x4444444444444444
var var_28h = 0x00177fd8 = (qword)0x3333333333333333
var var_30h = 0x00177fd0 = (qword)0x4444444444444444
var var_10h = 0x00177ff0 = (qword)0x1111111111111111
var var_18h = 0x00177fe8 = (qword)0x2222222222222222
EOF
RUN