Skip to content

Commit 71e8f7f

Browse files
committed
better but not yet
1 parent d8a7cee commit 71e8f7f

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
@@ -203,7 +203,9 @@ R_API void r_core_bin_export_info(RCore *core, int mode) {
203203
r_strbuf_appendf (s0, "f %s @ %s\n", k, v);
204204
} else if (IS_MODE_SET (mode)) {
205205
ut64 nv = r_num_math (core->num, v);
206-
r_flag_set (core->flags, k, nv, 0);
206+
if (!r_flag_get (core->flags, k)) {
207+
r_flag_set (core->flags, k, nv, 0);
208+
}
207209
}
208210
#endif
209211
free (offset);
@@ -284,14 +286,30 @@ R_API void r_core_bin_export_info(RCore *core, int mode) {
284286
r_strbuf_appendf (s2, "fl %s %s\n", k, v);
285287
#else
286288
if (IS_MODE_RAD (mode)) {
287-
r_strbuf_appendf (s2, "fl %s %s\n", flagname, v);
289+
r_strbuf_appendf (s2, "fl %s %s\n", k, v);
288290
} else if (IS_MODE_SET (mode)) {
289-
RFlagItem *fi = r_flag_get (core->flags, flagname);
291+
#if 0
292+
char *s = r_core_cmd_str ("k bin/cur/pe_overlay.size");
293+
free (s);
294+
#else
295+
RFlagItem *fi = r_flag_get (core->flags, k);
290296
if (fi) {
291297
fi->size = r_num_math (core->num, v);
292298
} else {
293-
R_LOG_ERROR ("Cannot find flag named '%s'", flagname);
299+
char *s = strdup (k);
300+
char *kk = r_str_replace (s, ".size", ".offset", 0);
301+
const char *addr = sdb_const_get (db, kk, 0);
302+
if (R_STR_ISEMPTY (addr)) {
303+
R_LOG_ERROR ("Cannot find flag named '%s'", k);
304+
} else {
305+
ut64 naddr = r_num_math (NULL, addr);
306+
ut64 size = r_num_math (NULL, v);
307+
r_flag_set (core->flags, k, naddr, size);
308+
// r_core_cmdf (core, "fl %s %s@%s", k, v, addr);
309+
}
310+
free (kk);
294311
}
312+
#endif
295313
}
296314
#endif
297315
}

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)