mirror of
https://github.com/radareorg/radare2.git
synced 2024-12-04 11:43:39 +00:00
Fix issues in iCj, drlj and arlj ##json
This commit is contained in:
parent
362e24892d
commit
1e5a3a15bd
@ -1009,19 +1009,23 @@ R_API void r_bin_list_archs(RBin *bin, int mode) {
|
||||
}
|
||||
Sdb *binfile_sdb = binfile? binfile->sdb: NULL;
|
||||
if (!binfile_sdb) {
|
||||
eprintf ("Cannot find SDB!\n");
|
||||
// eprintf ("Cannot find SDB!\n");
|
||||
return;
|
||||
}
|
||||
if (!binfile) {
|
||||
eprintf ("Binary format not currently loaded!\n");
|
||||
// eprintf ("Binary format not currently loaded!\n");
|
||||
return;
|
||||
}
|
||||
sdb_unset (binfile_sdb, ARCHS_KEY, 0);
|
||||
PJ *pj = pj_new ();
|
||||
pj_o (pj);
|
||||
if (mode == 'j') {
|
||||
bin->cb_printf ("\"bins\":[");
|
||||
pj_k (pj, "bins");
|
||||
pj_a (pj);
|
||||
}
|
||||
RBinFile *nbinfile = r_bin_file_find_by_name_n (bin, name, i);
|
||||
if (!nbinfile) {
|
||||
pj_free (pj);
|
||||
return;
|
||||
}
|
||||
i = -1;
|
||||
@ -1047,11 +1051,15 @@ R_API void r_bin_list_archs(RBin *bin, int mode) {
|
||||
bin->cb_printf ("%s\n", arch);
|
||||
break;
|
||||
case 'j':
|
||||
bin->cb_printf ("%s{\"arch\":\"%s\",\"bits\":%d,"
|
||||
"\"offset\":%" PFMT64u ",\"size\":%" PFMT64u ","
|
||||
"\"machine\":\"%s\"}",
|
||||
i? ",": "", arch, bits,
|
||||
boffset, obj_size, machine);
|
||||
pj_o (pj);
|
||||
pj_ks (pj, "arch", arch);
|
||||
pj_ki (pj, "bits", bits);
|
||||
pj_kn (pj, "offset", boffset);
|
||||
pj_kn (pj, "size", obj_size);
|
||||
if (machine) {
|
||||
pj_ks (pj, "machine", machine);
|
||||
}
|
||||
pj_end (pj);
|
||||
break;
|
||||
default:
|
||||
r_table_add_rowf (table, "nXnss", i, boffset, obj_size, sdb_fmt ("%s_%i", arch, bits), machine);
|
||||
@ -1069,11 +1077,15 @@ R_API void r_bin_list_archs(RBin *bin, int mode) {
|
||||
bin->cb_printf ("%s\n", arch);
|
||||
break;
|
||||
case 'j':
|
||||
bin->cb_printf ("%s{\"arch\":\"%s\",\"bits\":%d,"
|
||||
"\"offset\":%" PFMT64u ",\"size\":%" PFMT64u ","
|
||||
"\"machine\":\"%s\"}",
|
||||
i? ",": "", arch, bits,
|
||||
boffset, obj_size, machine);
|
||||
pj_o (pj);
|
||||
pj_ks (pj, "arch", arch);
|
||||
pj_ki (pj, "bits", bits);
|
||||
pj_kn (pj, "offset", boffset);
|
||||
pj_kn (pj, "size", obj_size);
|
||||
if (machine) {
|
||||
pj_ks (pj, "machine", machine);
|
||||
}
|
||||
pj_end (pj);
|
||||
break;
|
||||
default:
|
||||
r_table_add_rowf (table, "nsnss", i, sdb_fmt ("0x%08" PFMT64x , boffset), obj_size, sdb_fmt("%s_%i", arch, bits), "");
|
||||
@ -1088,11 +1100,15 @@ R_API void r_bin_list_archs(RBin *bin, int mode) {
|
||||
bin->cb_printf ("%s\n", arch);
|
||||
break;
|
||||
case 'j':
|
||||
bin->cb_printf ("%s{\"arch\":\"unk_%d\",\"bits\":%d,"
|
||||
"\"offset\":%" PFMT64u ",\"size\":%" PFMT64u ","
|
||||
"\"machine\":\"%s\"}",
|
||||
i? ",": "", i, bits,
|
||||
boffset, obj_size, machine);
|
||||
pj_o (pj);
|
||||
pj_ks (pj, "arch", arch);
|
||||
pj_ki (pj, "bits", bits);
|
||||
pj_kn (pj, "offset", boffset);
|
||||
pj_kn (pj, "size", obj_size);
|
||||
if (machine) {
|
||||
pj_ks (pj, "machine", machine);
|
||||
}
|
||||
pj_end (pj);
|
||||
break;
|
||||
default:
|
||||
r_table_add_rowf (table, "nsnss", i, sdb_fmt ("0x%08" PFMT64x , boffset), obj_size, "", "");
|
||||
@ -1107,8 +1123,14 @@ R_API void r_bin_list_archs(RBin *bin, int mode) {
|
||||
//sdb_array_push (binfile_sdb, ARCHS_KEY, archline, 0);
|
||||
}
|
||||
if (mode == 'j') {
|
||||
bin->cb_printf ("]");
|
||||
pj_end (pj);
|
||||
pj_end (pj);
|
||||
const char *s = pj_string (pj);
|
||||
if (s) {
|
||||
bin->cb_printf ("%s\n", s);
|
||||
}
|
||||
}
|
||||
pj_free (pj);
|
||||
r_table_free (table);
|
||||
}
|
||||
|
||||
|
@ -3740,7 +3740,11 @@ static int bin_signature(RCore *r, int mode) {
|
||||
RBinPlugin *plg = r_bin_file_cur_plugin (cur);
|
||||
if (plg && plg->signature) {
|
||||
const char *signature = plg->signature (cur, IS_MODE_JSON (mode));
|
||||
r_cons_println (signature);
|
||||
if (IS_MODE_JSON (mode)) {
|
||||
r_cons_printf ("{\"signature\":%s}", signature);
|
||||
} else {
|
||||
r_cons_println (signature);
|
||||
}
|
||||
free ((char*) signature);
|
||||
return true;
|
||||
}
|
||||
|
@ -3984,13 +3984,26 @@ void cmd_anal_reg(RCore *core, const char *str) {
|
||||
switch (str[0]) {
|
||||
case 'l': // "arl"
|
||||
{
|
||||
const bool use_json = str[1] == 'j';
|
||||
RRegSet *rs = r_reg_regset_get (core->anal->reg, R_REG_TYPE_GPR);
|
||||
if (rs) {
|
||||
RRegItem *r;
|
||||
RListIter *iter;
|
||||
PJ *pj = pj_new ();
|
||||
pj_a (pj);
|
||||
r_list_foreach (rs->regs, iter, r) {
|
||||
r_cons_println (r->name);
|
||||
if (use_json) {
|
||||
pj_s (pj, r->name);
|
||||
} else {
|
||||
r_cons_println (r->name);
|
||||
}
|
||||
}
|
||||
if (use_json) {
|
||||
pj_end (pj);
|
||||
const char *s = pj_string (pj);
|
||||
r_cons_println (s);
|
||||
}
|
||||
pj_free (pj);
|
||||
}
|
||||
} break;
|
||||
case '0': // "ar0"
|
||||
|
@ -2408,36 +2408,30 @@ static void cmd_debug_reg(RCore *core, const char *str) {
|
||||
break;
|
||||
case 'l': // "drl[j]"
|
||||
{
|
||||
bool json_out = false;
|
||||
switch (str[1]) {
|
||||
case 'j':
|
||||
json_out = true;
|
||||
/* fall trhu */
|
||||
case 0:
|
||||
{
|
||||
RRegSet *rs = r_reg_regset_get (core->dbg->reg, R_REG_TYPE_GPR);
|
||||
if (rs) {
|
||||
RRegItem *r;
|
||||
RListIter *iter;
|
||||
i = 0;
|
||||
if (json_out) {
|
||||
r_cons_printf ("[");
|
||||
}
|
||||
r_list_foreach (rs->regs, iter, r) {
|
||||
if (json_out) {
|
||||
r_cons_printf ("%s\"%s\"",
|
||||
(i ? "," : ""),
|
||||
r->name);
|
||||
i++;
|
||||
} else {
|
||||
r_cons_println (r->name);
|
||||
}
|
||||
}
|
||||
if (json_out) {
|
||||
r_cons_printf ("]");
|
||||
}
|
||||
const bool json_out = str[1] == 'j';
|
||||
RRegSet *rs = r_reg_regset_get (core->dbg->reg, R_REG_TYPE_GPR);
|
||||
if (rs) {
|
||||
RRegItem *r;
|
||||
RListIter *iter;
|
||||
i = 0;
|
||||
PJ *pj = NULL;
|
||||
if (json_out) {
|
||||
pj = pj_new ();
|
||||
pj_a (pj);
|
||||
}
|
||||
r_list_foreach (rs->regs, iter, r) {
|
||||
if (json_out) {
|
||||
pj_s (pj, r->name);
|
||||
i++;
|
||||
} else {
|
||||
r_cons_println (r->name);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (json_out) {
|
||||
pj_end (pj);
|
||||
const char *s = pj_string (pj);
|
||||
r_cons_println (s);
|
||||
pj_free (pj);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ static const char *help_msg_i[] = {
|
||||
"icg", "", "List classes as agn/age commands to create class hirearchy graphs",
|
||||
"icq", "", "List classes, in quiet mode (just the classname)",
|
||||
"icqq", "", "List classes, in quieter mode (only show non-system classnames)",
|
||||
"iC", "", "Show signature info (entitlements, ...)",
|
||||
"iC", "[j]", "Show signature info (entitlements, ...)",
|
||||
"id", "[?]", "Debug information (source lines)",
|
||||
"idp", "", "Load pdb file information",
|
||||
"iD", " lang sym", "demangle symbolname for given language",
|
||||
@ -583,12 +583,9 @@ static int cmd_info(void *data, const char *input) {
|
||||
r_core_bin_info (core, x, mode, va, NULL, y);
|
||||
case 'A': // "iA"
|
||||
newline = false;
|
||||
if (input[1] == 'j') {
|
||||
r_cons_printf ("{");
|
||||
r_bin_list_archs (core->bin, 'j');
|
||||
r_cons_printf ("}\n");
|
||||
} else {
|
||||
r_bin_list_archs (core->bin, 1);
|
||||
{
|
||||
int mode = (input[1] == 'j')? 'j': 1;
|
||||
r_bin_list_archs (core->bin, mode);
|
||||
}
|
||||
break;
|
||||
case 'E': // "iE"
|
||||
@ -953,7 +950,7 @@ static int cmd_info(void *data, const char *input) {
|
||||
RBININFO ("versioninfo", R_CORE_BIN_ACC_VERSIONINFO, NULL, 0);
|
||||
break;
|
||||
case 'T': // "iT"
|
||||
case 'C': // "iC" // rabin2 -C create
|
||||
case 'C': // "iC" // rabin2 -C create // should be deprecated and just use iT (or find a better name)
|
||||
RBININFO ("signature", R_CORE_BIN_ACC_SIGNATURE, NULL, 0);
|
||||
break;
|
||||
case 'z': // "iz"
|
||||
|
Loading…
Reference in New Issue
Block a user