mirror of
https://github.com/radareorg/radare2.git
synced 2025-03-02 19:26:43 +00:00
Do not permit function names containing registers ##anal
This commit is contained in:
parent
3cde905a20
commit
3904417a7c
@ -1729,10 +1729,10 @@ R_API int r_anal_fcn_add(RAnal *a, ut64 addr, ut64 size, const char *name, int t
|
||||
fcn->bits = a->bits;
|
||||
r_anal_fcn_set_size (append ? NULL : a, fcn, size);
|
||||
free (fcn->name);
|
||||
if (!name) {
|
||||
fcn->name = r_str_newf ("fcn.%08"PFMT64x, fcn->addr);
|
||||
} else {
|
||||
if (name) {
|
||||
fcn->name = strdup (name);
|
||||
} else {
|
||||
fcn->name = r_str_newf ("fcn.%08"PFMT64x, fcn->addr);
|
||||
}
|
||||
fcn->type = type;
|
||||
if (diff) {
|
||||
|
@ -1597,12 +1597,6 @@ static void core_anal_bytes(RCore *core, const ut8 *buf, int len, int nops, int
|
||||
if (hint->opcode) {
|
||||
printline ("ophint", "%s\n", hint->opcode);
|
||||
}
|
||||
#if 0
|
||||
// addr should not override core->offset + idx.. its silly
|
||||
if (hint->addr != UT64_MAX) {
|
||||
printline ("addr", "0x%08" PFMT64x "\n", (hint->addr + idx));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
printline ("prefix", "%" PFMT64u "\n", op.prefix);
|
||||
printline ("id", "%d\n", op.id);
|
||||
@ -2181,48 +2175,42 @@ static bool fcnNeedsPrefix(const char *name) {
|
||||
return (!strchr (name, '.'));
|
||||
}
|
||||
|
||||
static char * getFunctionName (RCore *core, ut64 off, const char *name, bool prefix) {
|
||||
const char *fcnpfx = r_config_get (core->config, "anal.fcnprefix");
|
||||
if (prefix) {
|
||||
if (fcnNeedsPrefix (name)) {
|
||||
if (!fcnpfx || !*fcnpfx) {
|
||||
fcnpfx = "fcn";
|
||||
}
|
||||
}
|
||||
} else {
|
||||
fcnpfx = "";
|
||||
}
|
||||
if (strlen (name) < 4) {
|
||||
return r_str_newf ("%s.%s", (*fcnpfx)? fcnpfx: "fcn", name);
|
||||
}
|
||||
if (r_reg_get (core->anal->reg, name, -1)) {
|
||||
return r_str_newf ("%s.%08"PFMT64x, "fcn", off);
|
||||
}
|
||||
return strdup (name); // r_str_newf ("%s%s%s", fcnpfx, *fcnpfx? ".": "", name);
|
||||
}
|
||||
|
||||
/* TODO: move into r_anal_fcn_rename(); */
|
||||
static bool setFunctionName(RCore *core, ut64 off, const char *_name, bool prefix) {
|
||||
char *name, *nname = NULL;
|
||||
RAnalFunction *fcn;
|
||||
if (!core || !_name) {
|
||||
return false;
|
||||
}
|
||||
const char *fcnpfx = r_config_get (core->config, "anal.fcnprefix");
|
||||
if (!fcnpfx) {
|
||||
fcnpfx = "fcn";
|
||||
}
|
||||
if (r_reg_get (core->anal->reg, _name, -1)) {
|
||||
name = r_str_newf ("%s.%s", fcnpfx, _name);
|
||||
} else {
|
||||
name = strdup (_name);
|
||||
}
|
||||
fcn = r_anal_get_fcn_in (core->anal, off,
|
||||
R_ANAL_FCN_TYPE_FCN | R_ANAL_FCN_TYPE_SYM | R_ANAL_FCN_TYPE_LOC);
|
||||
r_return_val_if_fail (core && _name, false);
|
||||
char *name = getFunctionName (core, off, _name, prefix);
|
||||
RAnalFunction *fcn = r_anal_get_fcn_in (core->anal, off,
|
||||
R_ANAL_FCN_TYPE_FCN | R_ANAL_FCN_TYPE_SYM | R_ANAL_FCN_TYPE_LOC);
|
||||
if (!fcn) {
|
||||
free (name);
|
||||
return false;
|
||||
}
|
||||
if (prefix && fcnNeedsPrefix (name)) {
|
||||
nname = r_str_newf ("%s.%s", fcnpfx, name);
|
||||
} else {
|
||||
nname = strdup (name);
|
||||
}
|
||||
char *oname = fcn->name;
|
||||
RFlagItem *fi = r_flag_get (core->flags, fcn->name);
|
||||
if (fi) {
|
||||
r_flag_rename (core->flags, fi, nname);
|
||||
} else {
|
||||
// if we cant find a flag for that function.. create it?
|
||||
}
|
||||
fcn->name = strdup (nname);
|
||||
free (fcn->name);
|
||||
fcn->name = name;
|
||||
if (core->anal->cb.on_fcn_rename) {
|
||||
core->anal->cb.on_fcn_rename (core->anal,
|
||||
core->anal->user, fcn, nname);
|
||||
core->anal->user, fcn, name);
|
||||
}
|
||||
free (oname);
|
||||
free (nname);
|
||||
free (name);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user