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:
Paul I 2020-05-14 03:47:36 +03:00 committed by GitHub
parent d62c365856
commit ae45c06ae3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 6 deletions

View File

@ -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;
}

View File

@ -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}