From 8cb110efa3fd1fada8bb3f770fd2d3536a357bdd Mon Sep 17 00:00:00 2001 From: cyanpencil Date: Mon, 16 Jul 2018 23:35:55 +0200 Subject: [PATCH] Add function argument colors to palette --- libr/cons/pal.c | 10 ++++++++++ libr/core/cconfig.c | 1 + libr/core/core.c | 3 +++ libr/core/disasm.c | 19 +++++++++++++++---- libr/include/r_cons.h | 6 ++++++ 5 files changed, 35 insertions(+), 4 deletions(-) diff --git a/libr/cons/pal.c b/libr/cons/pal.c index 424973f5daefd..96c7befc5bdab 100644 --- a/libr/cons/pal.c +++ b/libr/cons/pal.c @@ -47,6 +47,9 @@ static struct { { "creg", r_offsetof (RConsPrintablePalette, creg), r_offsetof (RConsPalette, creg) }, { "num", r_offsetof (RConsPrintablePalette, num), r_offsetof (RConsPalette, num) }, { "mov", r_offsetof (RConsPrintablePalette, mov), r_offsetof (RConsPalette, mov) }, + { "func_arg", r_offsetof (RConsPrintablePalette, func_arg), r_offsetof (RConsPalette, func_arg) }, + { "func_arg_type", r_offsetof (RConsPrintablePalette, func_arg_type), r_offsetof (RConsPalette, func_arg_type) }, + { "func_arg_addr", r_offsetof (RConsPrintablePalette, func_arg_addr), r_offsetof (RConsPalette, func_arg_addr) }, { "ai.read", r_offsetof (RConsPrintablePalette, ai_read), r_offsetof (RConsPalette, ai_read) }, { "ai.write", r_offsetof (RConsPrintablePalette, ai_write), r_offsetof (RConsPalette, ai_write) }, @@ -54,6 +57,7 @@ static struct { { "ai.seq", r_offsetof (RConsPrintablePalette, ai_seq), r_offsetof (RConsPalette, ai_seq) }, { "ai.ascii", r_offsetof (RConsPrintablePalette, ai_ascii), r_offsetof (RConsPalette, ai_ascii) }, + { "graph.box", r_offsetof (RConsPrintablePalette, graph_box), r_offsetof (RConsPalette, graph_box) }, { "graph.box2", r_offsetof (RConsPrintablePalette, graph_box2), r_offsetof (RConsPalette, graph_box2) }, { "graph.box3", r_offsetof (RConsPrintablePalette, graph_box3), r_offsetof (RConsPalette, graph_box3) }, @@ -71,6 +75,8 @@ static struct { { "gui.border", r_offsetof (RConsPrintablePalette, gui_border), r_offsetof (RConsPalette, gui_border) }, { "wordhl", r_offsetof (RConsPrintablePalette, wordhl), r_offsetof (RConsPalette, wordhl) }, { "linehl", r_offsetof (RConsPrintablePalette, linehl), r_offsetof (RConsPalette, linehl) }, + + { NULL, 0, 0 } }; static const int keys_len = sizeof (keys) / sizeof (keys[0]) - 1; @@ -163,6 +169,10 @@ R_API void r_cons_pal_init() { cons->cpal.wordhl = (RColor) RColor_BGRED; cons->cpal.linehl = (RColor) RCOLOR (ALPHA_BG, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00); + cons->cpal.func_arg = (RColor) RColor_WHITE; + cons->cpal.func_arg_type = (RColor) RColor_BLUE; + cons->cpal.func_arg_addr = (RColor) RColor_CYAN; + cons->cpal.graph_box = (RColor) RColor_NULL; cons->cpal.graph_box2 = (RColor) RColor_BLUE; cons->cpal.graph_box3 = (RColor) RColor_MAGENTA; diff --git a/libr/core/cconfig.c b/libr/core/cconfig.c index 7dcdb66094b5d..342546413cf23 100644 --- a/libr/core/cconfig.c +++ b/libr/core/cconfig.c @@ -2870,6 +2870,7 @@ R_API int r_core_config_init(RCore *core) { SETPREF ("scr.zoneflags", "true", "Show zoneflags in visual mode before the title (see fz?)"); SETPREF ("scr.slow", "true", "Do slow stuff on visual mode like RFlag.get_at(true)"); SETPREF ("scr.color.ops", "true", "Colorize numbers and registers in opcodes"); + SETPREF ("scr.color.args", "true", "Colorize arguments and variables of functions"); SETPREF ("scr.color.bytes", "true", "Colorize bytes that represent the opcodes of the instruction"); #if __WINDOWS__ && !__CYGWIN__ SETCB ("scr.ansicon", r_str_bool (r_cons_singleton ()->ansicon), diff --git a/libr/core/core.c b/libr/core/core.c index 949bc5cff13b4..abaabbabf9095 100644 --- a/libr/core/core.c +++ b/libr/core/core.c @@ -1390,6 +1390,9 @@ static int autocomplete(RLine *line) { ADDARG("creg") ADDARG("num") ADDARG("mov") + ADDARG("func_arg") + ADDARG("func_arg_type") + ADDARG("func_arg_addr") ADDARG("ai.read") ADDARG("ai.write") ADDARG("ai.exec") diff --git a/libr/core/disasm.c b/libr/core/disasm.c index 0da6cb837c99b..05b1dcec316b2 100644 --- a/libr/core/disasm.c +++ b/libr/core/disasm.c @@ -12,6 +12,7 @@ #define R_MIDFLAGS_SYMALIGN 3 #define COLOR(ds, field) (ds->show_color ? ds->field : "") +#define COLOR_ARG(ds, field) (ds->show_color && ds->show_color_args ? ds->field : "") #define COLOR_CONST(ds, color) (ds->show_color ? Color_ ## color : "") #define COLOR_RESET(ds) COLOR_CONST(ds, RESET) @@ -80,6 +81,7 @@ typedef struct { bool use_esil; bool show_color; bool show_color_bytes; + bool show_color_args; int colorop; int acase; bool capitalize; @@ -209,6 +211,9 @@ typedef struct { const char *color_gui_alt_background; const char *color_gui_border; const char *color_linehl; + const char *color_func_arg; + const char *color_func_arg_type; + const char *color_func_arg_addr; RFlagItem *lastflag; RAnalHint *hint; @@ -556,6 +561,9 @@ static RDisasmState * ds_init(RCore *core) { ds->color_gui_alt_background = P(gui_alt_background): Color_GRAY; ds->color_gui_border = P(gui_border): Color_BGGRAY; ds->color_linehl = P(linehl): Color_BGBLUE; + ds->color_func_arg = P(func_arg): Color_WHITE; + ds->color_func_arg_type = P(func_arg_type): Color_BLUE; + ds->color_func_arg_addr = P(func_arg_addr): Color_CYAN; ds->immstr = r_config_get_i (core->config, "asm.imm.str"); ds->immtrim = r_config_get_i (core->config, "asm.imm.trim"); @@ -570,6 +578,7 @@ static RDisasmState * ds_init(RCore *core) { ds->asm_anal = r_config_get_i (core->config, "asm.anal"); ds->show_color = r_config_get_i (core->config, "scr.color"); ds->show_color_bytes = r_config_get_i (core->config, "scr.color.bytes"); // maybe rename to asm.color.bytes + ds->show_color_args = r_config_get_i (core->config, "scr.color.args"); ds->colorop = r_config_get_i (core->config, "scr.color.ops"); // XXX confusing name // asm.color.inst (mnemonic + operands) ? ds->show_utf8 = r_config_get_i (core->config, "scr.utf8"); ds->acase = r_config_get_i (core->config, "asm.ucase"); @@ -1390,9 +1399,10 @@ static ut32 tmp_get_realsize (RAnalFunction *f) { static void ds_show_functions_argvar(RDisasmState *ds, RAnalVar *var, const char *base, bool is_var, char sign) { int delta = sign == '+' ? var->delta : -var->delta; const char *pfx = is_var ? "var" : "arg"; - r_cons_printf ("%s%s %s%s%s%s %s@ %s%c0x%x", COLOR (ds, color_push), pfx, COLOR (ds, color_invalid), var->type, + r_cons_printf ("%s%s %s%s%s%s %s@ %s%c0x%x", COLOR_ARG (ds, color_func_arg), pfx, + COLOR_ARG (ds, color_func_arg_type), var->type, r_str_endswith (var->type, "*") ? "" : " ", - var->name, COLOR(ds, color_reg), base, sign, delta); + var->name, COLOR_ARG (ds, color_func_arg_addr), base, sign, delta); } static void printVarSummary(RDisasmState *ds, RList *list) { @@ -1666,9 +1676,10 @@ static void ds_show_functions(RDisasmState *ds) { eprintf("Register not found"); break; } - r_cons_printf ("%sarg %s%s%s%s %s@ %s", COLOR (ds, color_push), COLOR (ds, color_invalid), + r_cons_printf ("%sarg %s%s%s%s %s@ %s", COLOR_ARG (ds, color_func_arg), + COLOR_ARG (ds, color_func_arg_type), var->type, r_str_endswith (var->type, "*") ? "" : " ", - var->name, COLOR (ds, color_reg), i->name); + var->name, COLOR_ARG (ds, color_func_arg_addr), i->name); } break; case 's': { diff --git a/libr/include/r_cons.h b/libr/include/r_cons.h index 95f4f48cba295..bf1d33229c7f3 100644 --- a/libr/include/r_cons.h +++ b/libr/include/r_cons.h @@ -207,6 +207,9 @@ typedef struct r_cons_palette_t { RColor gui_border; RColor wordhl; RColor linehl; + RColor func_arg; + RColor func_arg_type; + RColor func_arg_addr; /* Graph colors */ RColor graph_box; @@ -272,6 +275,9 @@ typedef struct r_cons_printable_palette_t { char *gui_border; char *wordhl; char *linehl; + char *func_arg; + char *func_arg_type; + char *func_arg_addr; /* graph colors */ char *graph_box;