From 6e54a0c7a7fe6e22e9543db210d66abee9907656 Mon Sep 17 00:00:00 2001 From: pancake Date: Tue, 15 Oct 2013 01:17:54 +0200 Subject: [PATCH] Fix #255 - Too much function informations --- libr/anal/cc.c | 2 +- libr/core/disasm.c | 30 +++++++++++++++++++++--------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/libr/anal/cc.c b/libr/anal/cc.c index eca95b60a8..208a3270f1 100644 --- a/libr/anal/cc.c +++ b/libr/anal/cc.c @@ -89,7 +89,7 @@ R_API char *r_anal_cc_to_string (RAnal *anal, RAnalCC* cc) { snprintf (str, sizeof (str), "0x%08"PFMT64x"(", cc->jump); else strncpy (str, "unk(", sizeof (str)-1); str_len = strlen (str); - if (fcn) cc->nargs = (fcn->nargs>cc->nargs?cc->nargs:fcn->nargs); + if (fcn) cc->nargs = (fcn->nargs>cc->nargs?fcn->nargs:cc->nargs); if (cc->nargs>8) { //eprintf ("too many arguments for stdcall. chop to 8\n"); cc->nargs = 8; diff --git a/libr/core/disasm.c b/libr/core/disasm.c index 1d8cffa813..814f7d59a0 100644 --- a/libr/core/disasm.c +++ b/libr/core/disasm.c @@ -1099,19 +1099,31 @@ toro: } if (!r_anal_cc_update (core->anal, &cc, &analop)) { if (show_functions) { + char tmp[128]; char *ccstr = r_anal_cc_to_string (core->anal, &cc); if (ccstr) { RFlagItem *flag = r_flag_get_at (core->flags, cc.jump); + if (flag && ccstr) { + int delta = 0; + if (f) { delta = cc.jump-flag->offset; } + if (!strncmp (flag->name, ccstr, strlen (flag->name))) { + if (ccstr[strlen(flag->name)] == '(') { + tmp[0] = 0; + } else { + if (delta) + snprintf (tmp, sizeof (tmp), " ; %s+%d", flag->name, delta); + else snprintf (tmp, sizeof (tmp), " ; %s", flag->name); + } + } else { + if (delta) + snprintf (tmp, sizeof (tmp), " ; %s+%d", flag->name, delta); + else snprintf (tmp, sizeof (tmp), " ; %s", flag->name); + } + } if (show_color) - r_cons_printf ("\n%s%s"Color_RESET"%s%s"Color_RESET" %s; %s (%s+%d)"Color_RESET, - color_fline, pre, color_flow, refline, ccstr, - (flag&&flag->name)? flag->name: "", - (flag&&flag->name)? flag->name: "", - (f&&flag)? cc.jump-flag->offset: 0); - else r_cons_printf ("\n%s%s ; %s (%s+%d)", - pre, refline, ccstr, - (flag&&flag->name)?flag->name:"", - flag? cc.jump-flag->offset: 0); + r_cons_printf ("\n%s%s"Color_RESET"%s%s"Color_RESET" %s%s"Color_RESET, + color_fline, pre, color_flow, refline, ccstr, tmp); + else r_cons_printf ("\n%s%s %s%s", pre, refline, ccstr, tmp); free (ccstr); } }