flags: new fdt command to print more information about flag (#4502)

This commit is contained in:
Anton Kochkov 2024-05-19 18:09:02 +08:00 committed by GitHub
parent 14e97874a3
commit 4ead42d9c4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 34 additions and 3 deletions

View file

@ -330,6 +330,8 @@ RZ_IPI void rz_core_flag_describe(RzCore *core, ut64 addr, bool strict_offset, R
return; return;
} }
PJ *pj = state->d.pj; PJ *pj = state->d.pj;
rz_cmd_state_output_set_columnsf(state, "ssXXds", "name", "realname",
"vaddr", "paddr", "size", "comment");
switch (state->mode) { switch (state->mode) {
case RZ_OUTPUT_MODE_JSON: case RZ_OUTPUT_MODE_JSON:
pj_o(pj); pj_o(pj);
@ -341,6 +343,21 @@ RZ_IPI void rz_core_flag_describe(RzCore *core, ut64 addr, bool strict_offset, R
} }
pj_end(pj); pj_end(pj);
break; break;
case RZ_OUTPUT_MODE_TABLE: {
// Print realname if exists and asm.flags.real is enabled
const char *name = core->flags->realnames && f->realname ? f->realname : f->name;
ut64 paddr = rz_io_v2p(core->io, addr);
if (f->offset != addr) {
char *descr_name = rz_str_newf("%s + %d", name, (int)(addr - f->offset));
rz_table_add_rowf(state->d.t, "ssXXds", f->name, descr_name,
addr, paddr, f->size, f->comment);
free(descr_name);
} else {
rz_table_add_rowf(state->d.t, "ssXXds", f->name, name, addr,
paddr, f->size, f->comment);
}
break;
}
case RZ_OUTPUT_MODE_STANDARD: { case RZ_OUTPUT_MODE_STANDARD: {
// Print realname if exists and asm.flags.real is enabled // Print realname if exists and asm.flags.real is enabled
const char *name = core->flags->realnames && f->realname ? f->realname : f->name; const char *name = core->flags->realnames && f->realname ? f->realname : f->name;
@ -369,6 +386,8 @@ RZ_IPI RzCmdStatus rz_flag_describe_at_handler(RzCore *core, int argc, const cha
} }
PJ *pj = state->d.pj; PJ *pj = state->d.pj;
rz_cmd_state_output_array_start(state); rz_cmd_state_output_array_start(state);
rz_cmd_state_output_set_columnsf(state, "ssXXds", "name", "realname",
"vaddr", "paddr", "size", "comment");
RzFlagItem *flag; RzFlagItem *flag;
RzListIter *iter; RzListIter *iter;
// Sometimes an address has multiple flags assigned to, show them all // Sometimes an address has multiple flags assigned to, show them all
@ -385,7 +404,15 @@ RZ_IPI RzCmdStatus rz_flag_describe_at_handler(RzCore *core, int argc, const cha
} }
pj_end(pj); pj_end(pj);
break; break;
case RZ_OUTPUT_MODE_STANDARD: case RZ_OUTPUT_MODE_TABLE: {
// Print realname if exists and asm.flags.real is enabled
const char *name = core->flags->realnames && flag->realname ? flag->realname : flag->name;
ut64 paddr = rz_io_v2p(core->io, flag->offset);
rz_table_add_rowf(state->d.t, "ssXXds", flag->name, name,
flag->offset, paddr, flag->size, flag->comment);
break;
}
case RZ_OUTPUT_MODE_STANDARD: {
// Print realname if exists and asm.flags.real is enabled // Print realname if exists and asm.flags.real is enabled
if (core->flags->realnames && flag->realname) { if (core->flags->realnames && flag->realname) {
rz_cons_println(flag->realname); rz_cons_println(flag->realname);
@ -393,6 +420,8 @@ RZ_IPI RzCmdStatus rz_flag_describe_at_handler(RzCore *core, int argc, const cha
rz_cons_println(flag->name); rz_cons_println(flag->name);
} }
break; break;
}
default: default:
rz_warn_if_reached(); rz_warn_if_reached();
break; break;

View file

@ -21123,10 +21123,10 @@ RZ_IPI void rzshell_cmddescs_init(RzCore *core) {
RzCmdDesc *flag_comment_cd = rz_cmd_desc_argv_new(core->rcmd, f_cd, "fC", rz_flag_comment_handler, &flag_comment_help); RzCmdDesc *flag_comment_cd = rz_cmd_desc_argv_new(core->rcmd, f_cd, "fC", rz_flag_comment_handler, &flag_comment_help);
rz_warn_if_fail(flag_comment_cd); rz_warn_if_fail(flag_comment_cd);
RzCmdDesc *fd_cd = rz_cmd_desc_group_state_new(core->rcmd, f_cd, "fd", RZ_OUTPUT_MODE_STANDARD | RZ_OUTPUT_MODE_JSON, rz_flag_describe_handler, &flag_describe_help, &fd_help); RzCmdDesc *fd_cd = rz_cmd_desc_group_state_new(core->rcmd, f_cd, "fd", RZ_OUTPUT_MODE_STANDARD | RZ_OUTPUT_MODE_TABLE | RZ_OUTPUT_MODE_JSON, rz_flag_describe_handler, &flag_describe_help, &fd_help);
rz_warn_if_fail(fd_cd); rz_warn_if_fail(fd_cd);
rz_cmd_desc_set_default_mode(fd_cd, RZ_OUTPUT_MODE_STANDARD); rz_cmd_desc_set_default_mode(fd_cd, RZ_OUTPUT_MODE_STANDARD);
RzCmdDesc *flag_describe_at_cd = rz_cmd_desc_argv_state_new(core->rcmd, fd_cd, "fd.", RZ_OUTPUT_MODE_STANDARD | RZ_OUTPUT_MODE_JSON, rz_flag_describe_at_handler, &flag_describe_at_help); RzCmdDesc *flag_describe_at_cd = rz_cmd_desc_argv_state_new(core->rcmd, fd_cd, "fd.", RZ_OUTPUT_MODE_STANDARD | RZ_OUTPUT_MODE_TABLE | RZ_OUTPUT_MODE_JSON, rz_flag_describe_at_handler, &flag_describe_at_help);
rz_warn_if_fail(flag_describe_at_cd); rz_warn_if_fail(flag_describe_at_cd);
rz_cmd_desc_set_default_mode(flag_describe_at_cd, RZ_OUTPUT_MODE_STANDARD); rz_cmd_desc_set_default_mode(flag_describe_at_cd, RZ_OUTPUT_MODE_STANDARD);

View file

@ -206,6 +206,7 @@ commands:
default_mode: RZ_OUTPUT_MODE_STANDARD default_mode: RZ_OUTPUT_MODE_STANDARD
modes: modes:
- RZ_OUTPUT_MODE_STANDARD - RZ_OUTPUT_MODE_STANDARD
- RZ_OUTPUT_MODE_TABLE
- RZ_OUTPUT_MODE_JSON - RZ_OUTPUT_MODE_JSON
args: [] args: []
- name: fd. - name: fd.
@ -215,6 +216,7 @@ commands:
default_mode: RZ_OUTPUT_MODE_STANDARD default_mode: RZ_OUTPUT_MODE_STANDARD
modes: modes:
- RZ_OUTPUT_MODE_STANDARD - RZ_OUTPUT_MODE_STANDARD
- RZ_OUTPUT_MODE_TABLE
- RZ_OUTPUT_MODE_JSON - RZ_OUTPUT_MODE_JSON
args: [] args: []
- name: fdw - name: fdw