mirror of
https://github.com/radareorg/radare2.git
synced 2024-10-08 02:53:29 +00:00
Add ahr command to set hint for func ret values
This commit is contained in:
parent
c858dae72c
commit
409419e4b2
@ -90,6 +90,10 @@ R_API void r_anal_hint_set_pointer(RAnal *a, ut64 addr, ut64 ptr) {
|
||||
setHint (a, "ptr:", addr, NULL, ptr);
|
||||
}
|
||||
|
||||
R_API void r_anal_hint_set_ret(RAnal *a, ut64 addr, ut64 val) {
|
||||
setHint (a, "ret:", addr, NULL, val);
|
||||
}
|
||||
|
||||
R_API void r_anal_hint_set_arch(RAnal *a, ut64 addr, const char *arch) {
|
||||
setHint (a, "arch:", addr, r_str_trim_ro (arch), 0);
|
||||
}
|
||||
@ -148,6 +152,10 @@ R_API void r_anal_hint_unset_pointer(RAnal *a, ut64 addr) {
|
||||
unsetHint(a, "ptr:", addr);
|
||||
}
|
||||
|
||||
R_API void r_anal_hint_unset_ret(RAnal *a, ut64 addr) {
|
||||
unsetHint(a, "ret:", addr);
|
||||
}
|
||||
|
||||
R_API void r_anal_hint_unset_offset(RAnal *a, ut64 addr) {
|
||||
unsetHint (a, "Offset:", addr);
|
||||
}
|
||||
@ -180,6 +188,7 @@ R_API RAnalHint *r_anal_hint_from_string(RAnal *a, ut64 addr, const char *str) {
|
||||
}
|
||||
hint->jump = UT64_MAX;
|
||||
hint->fail = UT64_MAX;
|
||||
hint->ret = UT64_MAX;
|
||||
char *s = strdup (str);
|
||||
if (!s) {
|
||||
free (hint);
|
||||
@ -199,6 +208,7 @@ R_API RAnalHint *r_anal_hint_from_string(RAnal *a, ut64 addr, const char *str) {
|
||||
case 'j': hint->jump = sdb_atoi (nxt); break;
|
||||
case 'f': hint->fail = sdb_atoi (nxt); break;
|
||||
case 'p': hint->ptr = sdb_atoi (nxt); break;
|
||||
case 'r': hint->ret = sdb_atoi (nxt); break;
|
||||
case 'b': hint->bits = sdb_atoi (nxt); break;
|
||||
case 'B': hint->new_bits = sdb_atoi (nxt); break;
|
||||
case 's': hint->size = sdb_atoi (nxt); break;
|
||||
|
@ -872,6 +872,9 @@ static void print_hint_h_format(RAnalHint* hint) {
|
||||
if (hint->jump != UT64_MAX) {
|
||||
r_cons_printf (" jump: 0x%"PFMT64x, hint->jump);
|
||||
}
|
||||
if (hint->ret != UT64_MAX) {
|
||||
r_cons_printf (" ret: 0x%"PFMT64x, hint->ret);
|
||||
}
|
||||
r_cons_newline ();
|
||||
}
|
||||
|
||||
|
@ -450,6 +450,7 @@ static const char *help_msg_ah[] = {
|
||||
"ahj", "", "list hints in JSON",
|
||||
"aho", " foo a0,33", "replace opcode string",
|
||||
"ahp", " addr", "set pointer hint",
|
||||
"ahr", " val", "set hint for return value of a function"
|
||||
"ahs", " 4", "set opcode size=4",
|
||||
"ahS", " jz", "set asm.syntax=jz for this opcode",
|
||||
NULL
|
||||
@ -5543,6 +5544,12 @@ static void cmd_anal_hint(RCore *core, const char *input) {
|
||||
r_anal_hint_unset_pointer (core->anal, core->offset);
|
||||
}
|
||||
break;
|
||||
case 'r': // "ahr"
|
||||
if (input[1] == ' ') {
|
||||
r_anal_hint_set_ret (core->anal, core->offset, r_num_math (core->num, input + 1));
|
||||
} else if (input[1] == '-') { // "ahr-"
|
||||
r_anal_hint_unset_ret (core->anal, core->offset);
|
||||
}
|
||||
case '*': // "ah*"
|
||||
if (input[1] == ' ') {
|
||||
char *ptr = strdup (r_str_trim_ro (input + 2));
|
||||
|
@ -707,6 +707,7 @@ typedef struct r_anal_hint_t {
|
||||
ut64 ptr;
|
||||
ut64 jump;
|
||||
ut64 fail;
|
||||
ut64 ret; // hint for function ret values
|
||||
char *arch;
|
||||
char *opcode;
|
||||
char *syntax;
|
||||
@ -1581,6 +1582,7 @@ R_API void r_anal_hint_set_size (RAnal *a, ut64 addr, int length);
|
||||
R_API void r_anal_hint_set_opcode (RAnal *a, ut64 addr, const char *str);
|
||||
R_API void r_anal_hint_set_esil (RAnal *a, ut64 addr, const char *str);
|
||||
R_API void r_anal_hint_set_pointer (RAnal *a, ut64 addr, ut64 jump);
|
||||
R_API void r_anal_hint_set_ret(RAnal *a, ut64 addr, ut64 val);
|
||||
R_API void r_anal_hint_set_high(RAnal *a, ut64 addr);
|
||||
R_API void r_anal_hint_unset_high(RAnal *a, ut64 addr);
|
||||
R_API void r_anal_hint_unset_size(RAnal *a, ut64 addr);
|
||||
@ -1590,6 +1592,7 @@ R_API void r_anal_hint_unset_opcode(RAnal *a, ut64 addr);
|
||||
R_API void r_anal_hint_unset_arch(RAnal *a, ut64 addr);
|
||||
R_API void r_anal_hint_unset_syntax(RAnal *a, ut64 addr);
|
||||
R_API void r_anal_hint_unset_pointer(RAnal *a, ut64 addr);
|
||||
R_API void r_anal_hint_unset_ret(RAnal *a, ut64 addr);
|
||||
R_API void r_anal_hint_unset_offset(RAnal *a, ut64 addr);
|
||||
R_API void r_anal_hint_unset_jump(RAnal *a, ut64 addr);
|
||||
R_API void r_anal_hint_unset_fail(RAnal *a, ut64 addr);
|
||||
|
Loading…
Reference in New Issue
Block a user