Improve aeg command and add aaef as an alias for aef@@@F ##anal

This commit is contained in:
pancake 2020-03-23 02:47:26 +01:00 committed by radare
parent 32580864ff
commit 32b39e89cb
2 changed files with 34 additions and 17 deletions

View File

@ -3374,19 +3374,18 @@ static bool check_changes(RAGraph *g, int is_interactive, RCore *core, RAnalFunc
}
if (core) {
ut64 off = r_anal_get_bbaddr (core->anal, core->offset);
if (off == UT64_MAX) {
return false;
}
char *title = get_title (off);
RANode *cur_anode = get_anode (g->curnode);
if (fcn && ((is_interactive && !cur_anode) || (cur_anode && strcmp (cur_anode->title, title)))) {
g->update_seek_on = r_agraph_get_node (g, title);
if (g->update_seek_on) {
r_agraph_set_curnode (g, g->update_seek_on);
g->force_update_seek = true;
if (off != UT64_MAX) {
char *title = get_title (off);
RANode *cur_anode = get_anode (g->curnode);
if (fcn && ((is_interactive && !cur_anode) || (cur_anode && strcmp (cur_anode->title, title)))) {
g->update_seek_on = r_agraph_get_node (g, title);
if (g->update_seek_on) {
r_agraph_set_curnode (g, g->update_seek_on);
g->force_update_seek = true;
}
}
free (title);
}
free (title);
g->can->color = r_config_get_i (core->config, "scr.color");
g->hints = r_config_get_i (core->config, "graph.hints");
}
@ -4200,6 +4199,13 @@ R_API int r_core_visual_graph(RCore *core, RAGraph *g, RAnalFunction *_fcn, int
agraph_update_seek (g, get_anode (g->curnode), true);
// update scroll (with minor shift)
break;
// Those hardcoded keys are useful only for aegi, should add subcommand of ag to set key actions
case '1':
r_core_cmd0 (core, "so;.aeg*");
break;
case '2':
r_core_cmd0 (core, "so-1;.aeg*");
break;
case '=':
{ // TODO: edit
showcursor (core, true);

View File

@ -5951,17 +5951,21 @@ static void cmd_anal_esil(RCore *core, const char *input) {
r_anal_esil_interrupt_free (esil, interrupt);
}
break;
// TODO: display help?
}
}
break;
case 'g': // "aeg"
if (input[1] == 'v') {
r_core_cmd0 (core, ".aeg;agg");
if (input[1] == 'i' || input[1] == 'v') {
char *oprompt = strdup (r_config_get (core->config, "cmd.gprompt"));
r_config_set (core->config, "cmd.gprompt", "pi 1");
r_core_cmd0 (core, ".aeg*;aggv");
r_config_set (core->config, "cmd.gprompt", oprompt);
free (oprompt);
} else if (!input[1]) {
r_core_cmd0 (core, ".aeg*;agg");
} else if (input[1] == ' ') {
r_core_anal_esil_graph (core, input + 2);
} else { // "*"
} else if (input[1] == '*') {
RAnalOp *aop = r_core_anal_op (core, core->offset, R_ANAL_OP_MASK_ESIL);
if (aop) {
const char *esilstr = r_strbuf_get (&aop->esil);
@ -5969,6 +5973,11 @@ static void cmd_anal_esil(RCore *core, const char *input) {
r_core_anal_esil_graph (core, esilstr);
}
}
} else {
r_cons_printf ("Usage: aeg[iv*]\n");
r_cons_printf (" aeg analyze current instruction as an esil graph\n");
r_cons_printf (" aeg* analyze current instruction as an esil graph\n");
r_cons_printf (" aegv and launch the visual interactive mode (.aeg*;aggv == aegv)\n");
}
break;
case 'b': // "aeb"
@ -9200,7 +9209,9 @@ static int cmd_anal_all(RCore *core, const char *input) {
cmd_anal_objc (core, input + 1, false);
break;
case 'e': // "aae"
if (input[1]) {
if (input[1] == 'f') { // "aaef
r_core_cmd0 (core, "aef@@@F");
} else if (input[1] == ' ') {
const char *len = (char *)input + 1;
char *addr = strchr (input + 2, ' ');
if (addr) {