mirror of
https://github.com/radareorg/radare2.git
synced 2024-10-07 18:43:45 +00:00
Added json version of register telescoping (#10530)
This commit is contained in:
parent
79b898fd15
commit
a9d957ee25
@ -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",
|
||||
@ -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;
|
||||
|
@ -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",
|
||||
@ -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;
|
||||
@ -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) {
|
||||
@ -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) {
|
||||
@ -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"
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user