Skip to content

Commit

Permalink
Added json version of register telescoping (#10530)
Browse files Browse the repository at this point in the history
  • Loading branch information
fcasal authored and radare committed Jun 28, 2018
1 parent 79b898f commit a9d957e
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 13 deletions.
10 changes: 9 additions & 1 deletion libr/core/cmd_anal.c
Expand Up @@ -495,6 +495,7 @@ static const char *help_msg_ar[] = {
"ar", " <type>", "Show all registers of given type",
"arC", "", "Display register profile comments",
"arr", "", "Show register references (telescoping)",
"arrj", "", "Show register references (telescoping) in JSON format",
"ar=", "([size])(:[regs])", "Show register values in columns",
"ar?", " <reg>", "Show register value",
"arb", " <type>", "Display hexdump of the given arena",
Expand Down Expand Up @@ -2941,7 +2942,14 @@ void cmd_anal_reg(RCore *core, const char *str) {
}
break;
case 'r': // "arr"
r_core_debug_rr (core, core->anal->reg);
switch (str[1]) {
case 'j': // "arrj"
r_core_debug_rr (core, core->dbg->reg, 'j');
break;
default:
r_core_debug_rr (core, core->dbg->reg, 0);
break;
}
break;
case 'S': { // "arS"
int sz;
Expand Down
52 changes: 41 additions & 11 deletions libr/core/cmd_debug.c
Expand Up @@ -322,6 +322,7 @@ static const char *help_msg_dr[] = {
"drps", "", "Fake register profile size",
"drpj", "", "Show the current register profile (JSON)",
"drr", "", "Show registers references (telescoping)",
"drrj", "", "Show registers references (telescoping) in JSON format",
// TODO: 'drs' to swap register arenas and display old register valuez
"drs", "[?]", "Stack register states",
"drt", " 16", "Show 16 bit registers",
Expand Down Expand Up @@ -1872,7 +1873,7 @@ static int cmd_debug_map(RCore *core, const char *input) {
#include "linux_heap_glibc.c"
#endif

R_API void r_core_debug_rr(RCore *core, RReg *reg) {
R_API void r_core_debug_rr(RCore *core, RReg *reg, int mode) {
char *use_color, *color = "";
int use_colors = r_config_get_i (core->config, "scr.color");
int delta = 0;
Expand All @@ -1889,6 +1890,9 @@ R_API void r_core_debug_rr(RCore *core, RReg *reg) {
use_color = NULL;
}
r_debug_map_sync (core->dbg);
if (mode == 'j') {
r_cons_printf("[");
}
r_list_foreach (list, iter, r) {
char *rrstr, *tmp = NULL;
if (r->size != bits) {
Expand All @@ -1909,29 +1913,48 @@ R_API void r_core_debug_rr(RCore *core, RReg *reg) {
} else {
color = "";
}
if (bits == 64) {
switch (mode) {
case 'j':
if (r->flags) {
tmp = r_reg_get_bvalue (reg, r);
r_cons_printf ("%s%6s %018s%s", color, r->name, tmp, Color_RESET);
r_cons_printf ("%s{\"reg\":\"%s\",\"value\":\"%s\"", iter->p?",":"", r->name, tmp);
} else {
r_cons_printf ("%s%6s 0x%016"PFMT64x"%s", color, r->name, value, Color_RESET);
r_cons_printf ("%s{\"reg\":\"%s\",\"value\":\"0x%"PFMT64x"\"", iter->p?",":"", r->name, value);
}
} else {
if (r->flags) {
tmp = r_reg_get_bvalue (reg, r);
r_cons_printf ("%6s %010s", r->name, tmp);
break;
default:
if (bits == 64) {
if (r->flags) {
tmp = r_reg_get_bvalue (reg, r);
r_cons_printf ("%s%6s %-18s%s", color, r->name, tmp, Color_RESET);
} else {
r_cons_printf ("%s%6s 0x%-16"PFMT64x"%s", color, r->name, value, Color_RESET);
}
} else {
r_cons_printf ("%6s 0x%08"PFMT64x, r->name, value);
if (r->flags) {
tmp = r_reg_get_bvalue (reg, r);
r_cons_printf ("%s%6s %-10s%s", color, r->name, tmp, Color_RESET);
} else {
r_cons_printf ("%s%6s 0x%-8"PFMT64x"%s", color, r->name, value, Color_RESET);
}
}
break;
}
if (r->flags) {
free (tmp);
}
if (rrstr) {
r_cons_printf (" %s\n", rrstr);
if (mode == 'j') {
r_cons_printf (",\"ref\":\"%s\"}", rrstr);
} else {
r_cons_printf (" %s\n", rrstr);
}
free (rrstr);
}
}
if (mode == 'j') {
r_cons_printf("]\n");
}
}

static void show_drpi(RCore *core) {
Expand Down Expand Up @@ -2555,7 +2578,14 @@ static void cmd_debug_reg(RCore *core, const char *str) {
}
break;
case 'r': // "drr"
r_core_debug_rr (core, core->dbg->reg);
switch (str[1]) {
case 'j': // "drrj"
r_core_debug_rr (core, core->dbg->reg, 'j');
break;
default:
r_core_debug_rr (core, core->dbg->reg, 0);
break;
}
break;
case 'j': // "drj"
case '\0': // "dr"
Expand Down
2 changes: 1 addition & 1 deletion libr/include/r_core.h
Expand Up @@ -388,7 +388,7 @@ R_API int r_core_set_file_by_name (RBin * bin, const char * name);
R_API RBinFile * r_core_bin_cur (RCore *core);
R_API ut32 r_core_file_cur_fd (RCore *core);

R_API void r_core_debug_rr (RCore *core, RReg *reg);
R_API void r_core_debug_rr (RCore *core, RReg *reg, int mode);

/* fortune */
R_API void r_core_fortune_list_types(void);
Expand Down

0 comments on commit a9d957e

Please sign in to comment.