Skip to content

Commit 362275d

Browse files
committed
better but not yet
1 parent e7567bf commit 362275d

File tree

2 files changed

+32
-9
lines changed

2 files changed

+32
-9
lines changed

libr/core/cbin.c

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,9 @@ R_API void r_core_bin_export_info(RCore *core, int mode) {
199199
r_strbuf_appendf (s0, "f %s @ %s\n", k, v);
200200
} else if (IS_MODE_SET (mode)) {
201201
ut64 nv = r_num_math (core->num, v);
202-
r_flag_set (core->flags, k, nv, 0);
202+
if (!r_flag_get (core->flags, k)) {
203+
r_flag_set (core->flags, k, nv, 0);
204+
}
203205
}
204206
#endif
205207
free (offset);
@@ -280,14 +282,30 @@ R_API void r_core_bin_export_info(RCore *core, int mode) {
280282
r_strbuf_appendf (s2, "fl %s %s\n", k, v);
281283
#else
282284
if (IS_MODE_RAD (mode)) {
283-
r_strbuf_appendf (s2, "fl %s %s\n", flagname, v);
285+
r_strbuf_appendf (s2, "fl %s %s\n", k, v);
284286
} else if (IS_MODE_SET (mode)) {
285-
RFlagItem *fi = r_flag_get (core->flags, flagname);
287+
#if 0
288+
char *s = r_core_cmd_str ("k bin/cur/pe_overlay.size");
289+
free (s);
290+
#else
291+
RFlagItem *fi = r_flag_get (core->flags, k);
286292
if (fi) {
287293
fi->size = r_num_math (core->num, v);
288294
} else {
289-
R_LOG_ERROR ("Cannot find flag named '%s'", flagname);
295+
char *s = strdup (k);
296+
char *kk = r_str_replace (s, ".size", ".offset", 0);
297+
const char *addr = sdb_const_get (db, kk, 0);
298+
if (R_STR_ISEMPTY (addr)) {
299+
R_LOG_ERROR ("Cannot find flag named '%s'", k);
300+
} else {
301+
ut64 naddr = r_num_math (NULL, addr);
302+
ut64 size = r_num_math (NULL, v);
303+
r_flag_set (core->flags, k, naddr, size);
304+
// r_core_cmdf (core, "fl %s %s@%s", k, v, addr);
305+
}
306+
free (kk);
290307
}
308+
#endif
291309
}
292310
#endif
293311
}

libr/core/cmd_flag.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1140,10 +1140,14 @@ static int cmd_flag(void *data, const char *input) {
11401140
p = strchr (arg, ' ');
11411141
if (p) {
11421142
*p++ = 0;
1143-
item = r_flag_get_i (core->flags,
1144-
r_num_math (core->num, arg));
1145-
if (item)
1146-
item->size = r_num_math (core->num, p);
1143+
ut64 narg = r_num_math (core->num, arg);
1144+
item = r_flag_get_i (core->flags, narg);
1145+
ut64 nsize = r_num_math (core->num, p);
1146+
if (item) {
1147+
item->size = nsize;
1148+
} else {
1149+
r_flag_set (core->flags, arg, core->offset, nsize);
1150+
}
11471151
} else {
11481152
if (*arg) {
11491153
item = r_flag_get_i (core->flags, core->offset);
@@ -1160,8 +1164,9 @@ static int cmd_flag(void *data, const char *input) {
11601164
free (arg);
11611165
} else { // "fl"
11621166
item = r_flag_get_i (core->flags, core->offset);
1163-
if (item)
1167+
if (item) {
11641168
r_cons_printf ("0x%08"PFMT64x"\n", item->size);
1169+
}
11651170
}
11661171
break;
11671172
#if 0

0 commit comments

Comments
 (0)