Skip to content

Commit

Permalink
better but not yet
Browse files Browse the repository at this point in the history
  • Loading branch information
radare committed Apr 14, 2023
1 parent b00fd63 commit ba5fc1f
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 8 deletions.
26 changes: 22 additions & 4 deletions libr/core/cbin.c
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,9 @@ R_API void r_core_bin_export_info(RCore *core, int mode) {
r_strbuf_appendf (s0, "f %s @ %s\n", k, v);
} else if (IS_MODE_SET (mode)) {
ut64 nv = r_num_math (core->num, v);
r_flag_set (core->flags, k, nv, 0);
if (!r_flag_get (core->flags, k)) {
r_flag_set (core->flags, k, nv, 0);
}
}
#endif
free (offset);
Expand Down Expand Up @@ -283,14 +285,30 @@ R_API void r_core_bin_export_info(RCore *core, int mode) {
r_strbuf_appendf (s2, "fl %s %s\n", k, v);
#else
if (IS_MODE_RAD (mode)) {
r_strbuf_appendf (s2, "fl %s %s\n", flagname, v);
r_strbuf_appendf (s2, "fl %s %s\n", k, v);
} else if (IS_MODE_SET (mode)) {
RFlagItem *fi = r_flag_get (core->flags, flagname);
#if 0
char *s = r_core_cmd_str ("k bin/cur/pe_overlay.size");
free (s);
#else
RFlagItem *fi = r_flag_get (core->flags, k);
if (fi) {
fi->size = r_num_math (core->num, v);
} else {
R_LOG_ERROR ("Cannot find flag named '%s'", flagname);
char *s = strdup (k);
char *kk = r_str_replace (s, ".size", ".offset", 0);
const char *addr = sdb_const_get (db, kk, 0);
if (R_STR_ISEMPTY (addr)) {
R_LOG_ERROR ("Cannot find flag named '%s'", k);
} else {
ut64 naddr = r_num_math (NULL, addr);
ut64 size = r_num_math (NULL, v);
r_flag_set (core->flags, k, naddr, size);
// r_core_cmdf (core, "fl %s %s@%s", k, v, addr);
}
free (kk);
}
#endif
}
#endif
}
Expand Down
12 changes: 8 additions & 4 deletions libr/core/cmd_flag.c
Original file line number Diff line number Diff line change
Expand Up @@ -1141,10 +1141,14 @@ static int cmd_flag(void *data, const char *input) {
p = strchr (arg, ' ');
if (p) {
*p++ = 0;
item = r_flag_get_i (core->flags,
r_num_math (core->num, arg));
if (item)
item->size = r_num_math (core->num, p);
ut64 narg = r_num_math (core->num, arg);
item = r_flag_get_i (core->flags, narg);
ut64 nsize = r_num_math (core->num, p);
if (item) {
item->size = nsize;
} else {
r_flag_set (core->flags, arg, core->offset, nsize);
}
} else {
if (*arg) {
item = r_flag_get_i (core->flags, core->offset);
Expand Down

0 comments on commit ba5fc1f

Please sign in to comment.