mirror of
https://github.com/radareorg/radare2.git
synced 2025-02-04 20:46:20 +00:00
Reset anal regs in every iteration of aaft (4-10% faster) (#16786) ##anal
* Also removes aeim-;aei- calls at the end of the loop
This commit is contained in:
parent
d62c365856
commit
ae45c06ae3
@ -872,18 +872,18 @@ static bool cmd_anal_aaft(RCore *core) {
|
||||
}
|
||||
seek = core->offset;
|
||||
r_reg_arena_push (core->anal->reg);
|
||||
r_reg_arena_zero (core->anal->reg);
|
||||
r_core_cmd0 (core, "aei;aeim");
|
||||
ut8 *saved_arena = r_reg_arena_peek (core->anal->reg);
|
||||
// Iterating Reverse so that we get function in top-bottom call order
|
||||
r_list_foreach_prev (core->anal->fcns, it, fcn) {
|
||||
r_core_cmd0 (core, "aei");
|
||||
r_core_cmd0 (core, "aeim");
|
||||
int ret = r_core_seek (core, fcn->addr, true);
|
||||
if (!ret) {
|
||||
continue;
|
||||
}
|
||||
r_reg_arena_poke (core->anal->reg, saved_arena);
|
||||
r_anal_esil_set_pc (core->anal->esil, fcn->addr);
|
||||
r_core_anal_type_match (core, fcn);
|
||||
r_core_cmd0 (core, "aeim-");
|
||||
r_core_cmd0 (core, "aei-");
|
||||
if (r_cons_is_breaked ()) {
|
||||
break;
|
||||
}
|
||||
@ -892,6 +892,7 @@ static bool cmd_anal_aaft(RCore *core) {
|
||||
r_core_seek (core, seek, true);
|
||||
r_reg_arena_pop (core->anal->reg);
|
||||
r_config_set_i (core->config, io_cache_key, io_cache);
|
||||
free (saved_arena);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -2,8 +2,8 @@ NAME=fnj shows demangled symbols
|
||||
FILE=bins/elf/demangle-test-cpp
|
||||
CMDS=<<EOF
|
||||
aaa
|
||||
fj~{268}
|
||||
fnj~{268}
|
||||
fj~{269}
|
||||
fnj~{269}
|
||||
EOF
|
||||
EXPECT=<<EOF
|
||||
{"name":"reloc.operator_delete_void","realname":"reloc.operator delete(void*)","size":8,"offset":16432}
|
||||
|
Loading…
x
Reference in New Issue
Block a user