core/bin: convert cmd call to API

This commit is contained in:
Anton Kochkov 2024-02-16 11:12:03 +08:00 committed by Anton Kochkov
parent d0a24f5789
commit e9000ec45b
2 changed files with 12 additions and 7 deletions

View file

@ -4109,7 +4109,7 @@ RZ_API bool rz_core_bin_fields_print(RZ_NONNULL RzCore *core, RZ_NONNULL RzBinFi
rz_pvector_foreach (fields, iter) {
field = *iter;
switch (state->mode) {
case RZ_OUTPUT_MODE_JSON:
case RZ_OUTPUT_MODE_JSON: {
pj_o(state->d.pj);
pj_ks(state->d.pj, "name", field->name);
pj_kn(state->d.pj, "vaddr", field->vaddr);
@ -4120,16 +4120,19 @@ RZ_API bool rz_core_bin_fields_print(RZ_NONNULL RzCore *core, RZ_NONNULL RzBinFi
if (field->format && *field->format) {
pj_ks(state->d.pj, "format", field->format);
}
char *o = rz_core_cmd_strf(core, "pfj%c%s@ 0x%" PFMT64x,
field->format_named ? '.' : ' ', field->format, field->vaddr);
if (o && *o) {
rz_str_trim_tail(o);
int mode = RZ_PRINT_JSON;
char *realfmt = field->format_named ? rz_str_prepend(field->format, ".") : rz_str_dup(field->format);
char *format = rz_core_print_format(core, realfmt, mode, field->vaddr);
free(realfmt);
if (RZ_STR_ISNOTEMPTY(format)) {
rz_str_trim_tail(format);
pj_k(state->d.pj, "pf");
pj_j(state->d.pj, o);
pj_j(state->d.pj, format);
}
free(o);
free(format);
pj_end(state->d.pj);
break;
}
case RZ_OUTPUT_MODE_TABLE:
rz_table_add_rowf(state->d.t, "XsXs", field->paddr, field->name, field->vaddr, field->comment);
break;

View file

@ -4,6 +4,7 @@ CMDS=<<EOF
ic
icf Person
icm Person
icfj Person
EOF
EXPECT=<<EOF
address min max name super
@ -19,6 +20,7 @@ address index class flags name
0x100000da0 0 Person sayHello
0x100000df0 1 Person name
0x100000e20 2 Person setName:
[{"name":"Person::(property)name","class":"Person","addr":18446744073709551615},{"type":"struct objc_class *","name":"isa","class":"Person","addr":18446744073709551615},{"type":"*","name":"Person::(ivar)name","class":"Person","addr":4294971768}]
EOF
RUN