Skip to content

Commit 0f2dd3c

Browse files
radaretrufae
authored andcommitted
Code cleanup in the esil library
1 parent aace8c9 commit 0f2dd3c

File tree

5 files changed

+53
-103
lines changed

5 files changed

+53
-103
lines changed

libr/esil/esil.c

Lines changed: 9 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1-
/* radare - LGPL - Copyright 2014-2024 - pancake, condret */
1+
/* radare - LGPL - Copyright 2014-2026 - pancake, condret */
22

33
#define R_LOG_ORIGIN "esil"
44

55
#include <r_anal.h>
66
#include <r_io.h>
77
#include <r_reg.h>
88

9-
// TODO: replace esil->verbose with R_LOG_DEBUG
10-
#define IFDBG if (esil->verbose > 1)
119
R_IPI bool isregornum(REsil *esil, const char *str, ut64 *num);
1210

1311
R_IPI bool alignCheck(REsil *esil, ut64 addr) {
@@ -121,12 +119,6 @@ static bool default_is_reg(void *reg, const char *name) {
121119
return true;
122120
}
123121

124-
#if 0
125-
static bool default_reg_alias(void *reg, int kind, const char *name) {
126-
return r_reg_set_alias ((RReg *)reg, kind, name);
127-
}
128-
#endif
129-
130122
static bool default_reg_read(void *reg, const char *name, ut64 *val) {
131123
RRegItem *ri = r_reg_get ((RReg *)reg, name, -1);
132124
if (!ri) {
@@ -430,14 +422,14 @@ R_API bool r_esil_mem_write(REsil *esil, ut64 addr, const ut8 *buf, int len) {
430422
R_RETURN_VAL_IF_FAIL (esil && buf, false);
431423
addr &= esil->addrmask;
432424
bool ret = false;
433-
IFDBG {
434-
eprintf ("0x%08" PFMT64x " <W ", addr);
435-
int i;
436-
for (i = 0; i < len; i++) {
437-
eprintf ("%02x", buf[i]);
438-
}
439-
eprintf ("\n");
425+
#if DEBUG
426+
eprintf ("0x%08" PFMT64x " <W ", addr);
427+
int i;
428+
for (i = 0; i < len; i++) {
429+
eprintf ("%02x", buf[i]);
440430
}
431+
eprintf ("\n");
432+
#endif
441433
if (esil->cb.hook_mem_write) {
442434
ret = esil->cb.hook_mem_write (esil, addr, buf, len);
443435
}
@@ -479,20 +471,10 @@ static bool internal_esil_reg_read(REsil *esil, const char *regname, ut64 *num,
479471

480472
static bool internal_esil_reg_write(REsil *esil, const char *regname, ut64 num) {
481473
R_RETURN_VAL_IF_FAIL (esil && esil->anal, false);
482-
#if 1
483474
if (r_reg_setv (esil->anal->reg, regname, num)) {
484475
return true;
485476
}
486477
R_LOG_DEBUG ("Register %s does not exist", regname);
487-
#else
488-
RRegItem *ri = r_reg_get (esil->anal->reg, regname, -1);
489-
if (ri) {
490-
r_reg_set_value (esil->anal->reg, ri, num);
491-
R_LOG_DEBUG ("%s = %x", regname, (int)num);
492-
r_unref (ri);
493-
return true;
494-
}
495-
#endif
496478
return false;
497479
}
498480

@@ -759,7 +741,7 @@ static bool runword(REsil *esil, const char *word) {
759741
return false;
760742
}
761743

762-
//eprintf ("WORD (%d) (%s)\n", esil->skip, word);
744+
// eprintf ("WORD (%d) (%s)\n", esil->skip, word);
763745
if (!strcmp (word, "}{")) {
764746
if (esil->skip == 1) {
765747
esil->skip = 0;
@@ -887,12 +869,6 @@ static bool step_out(REsil *esil, const char *cmd) {
887869

888870
R_API bool r_esil_parse(REsil *esil, const char *str) {
889871
R_RETURN_VAL_IF_FAIL (esil, false);
890-
#if 0
891-
if (strstr (str, "(null)")) {
892-
R_LOG_WARN ("-> 0x%"PFMT64x" %s", esil->address, str);
893-
r_sys_breakpoint ();
894-
}
895-
#endif
896872
int rc = 0;
897873
bool in_delay = esil->delay > 0;
898874
int wordi = 0;
@@ -1094,7 +1070,6 @@ static bool internal_esil_mem_read(REsil *esil, ut64 addr, ut8 *buf, int len) {
10941070
return len;
10951071
}
10961072

1097-
10981073
/* register callbacks using this anal module. */
10991074
R_API bool r_esil_setup(REsil *esil, RAnal *anal, bool romem, bool stats, bool nonull) {
11001075
R_RETURN_VAL_IF_FAIL (esil, false);

libr/esil/esil_compiler.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* radare - LGPL - Copyright 2024 - pancake */
1+
/* radare - LGPL - Copyright 2024-2026 - pancake */
22

33
#include <r_esil.h>
44
#include <r_anal.h>

libr/esil/esil_ops.c

Lines changed: 14 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1484,7 +1484,6 @@ static bool esil_poke_n(REsil *esil, int bits) {
14841484
return false;
14851485
}
14861486
bool ret = false;
1487-
//eprintf ("GONA POKE %d src:%s dst:%s\n", bits, src, dst);
14881487
char *src2 = NULL;
14891488
if (src && r_esil_get_parm (esil, src, &num)) {
14901489
if (dst && r_esil_get_parm (esil, dst, &addr)) {
@@ -1499,37 +1498,23 @@ static bool esil_poke_n(REsil *esil, int bits) {
14991498
ut64 high = r_reg_getv (esil->anal->reg, reg);
15001499
ret = r_esil_mem_write (esil, addr, (const ut8*)&loow, 8);
15011500
ret = r_esil_mem_write (esil, addr + 8, (const ut8*)&high, 8);
1502-
#if 0
1503-
src2 = r_esil_pop (esil);
1504-
if (src2 && r_esil_get_parm (esil, src2, &num2)) {
1505-
r_write_ble (b, num, R_ARCH_CONFIG_IS_BIG_ENDIAN (esil->anal->config), 64);
1506-
ret = r_esil_mem_write (esil, addr, b, bytes);
1507-
if (ret == 0) {
1508-
r_write_ble (b, num2, R_ARCH_CONFIG_IS_BIG_ENDIAN (esil->anal->config), 64);
1509-
ret = r_esil_mem_write (esil, addr + 8, b, bytes);
1510-
}
1511-
goto out;
1512-
}
1513-
ret = false;
1514-
#endif
1515-
goto out;
1501+
} else {
1502+
// this is a internal peek performed before a poke
1503+
// we disable hooks to avoid run hooks on internal peeks
1504+
void * oldhook = (void*)esil->cb.hook_mem_read;
1505+
esil->cb.hook_mem_read = NULL;
1506+
r_esil_mem_read (esil, addr, b, bytes);
1507+
esil->cb.hook_mem_read = oldhook;
1508+
n = r_read_ble64 (b, R_ARCH_CONFIG_IS_BIG_ENDIAN (esil->anal->config));
1509+
esil->old = n;
1510+
esil->cur = num;
1511+
esil->lastsz = bits;
1512+
num = num & bitmask;
1513+
r_write_ble (b, num, R_ARCH_CONFIG_IS_BIG_ENDIAN (esil->anal->config), bits);
1514+
ret = r_esil_mem_write (esil, addr, b, bytes);
15161515
}
1517-
// this is a internal peek performed before a poke
1518-
// we disable hooks to avoid run hooks on internal peeks
1519-
void * oldhook = (void*)esil->cb.hook_mem_read;
1520-
esil->cb.hook_mem_read = NULL;
1521-
r_esil_mem_read (esil, addr, b, bytes);
1522-
esil->cb.hook_mem_read = oldhook;
1523-
n = r_read_ble64 (b, R_ARCH_CONFIG_IS_BIG_ENDIAN (esil->anal->config));
1524-
esil->old = n;
1525-
esil->cur = num;
1526-
esil->lastsz = bits;
1527-
num = num & bitmask;
1528-
r_write_ble (b, num, R_ARCH_CONFIG_IS_BIG_ENDIAN (esil->anal->config), bits);
1529-
ret = r_esil_mem_write (esil, addr, b, bytes);
15301516
}
15311517
}
1532-
out:
15331518
free (src2);
15341519
free (src);
15351520
free (dst);

libr/esil/esil_toc.c

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
/* radare - LGPL - Copyright 2021-2024 - pancake */
1+
/* radare - LGPL - Copyright 2021-2026 - pancake */
22

33
#include <r_esil.h>
4+
#include <r_anal.h>
45

56
static bool esil2c_eq(REsil *esil) {
67
REsilC *user = esil->user;
78
char *dst = r_esil_pop (esil);
89
char *src = r_esil_pop (esil);
9-
1010
if (!src || !dst) {
1111
free (dst);
1212
free (src);
1313
return false;
1414
}
15-
const char *pcreg = "rip";
16-
if (!strcmp (dst, pcreg)) {
15+
const char *pc = r_reg_alias_getname (esil->anal->reg, R_REG_ALIAS_PC);
16+
if (pc && !strcmp (dst, pc)) {
1717
r_strbuf_appendf (user->sb, " goto addr_0x%08"PFMT64x"_0;\n", r_num_get (NULL, src));
1818
} else {
1919
r_strbuf_appendf (user->sb, " %s = %s;\n", dst, src);
@@ -26,7 +26,6 @@ static bool esil2c_eq(REsil *esil) {
2626
static bool esil2c_peek8(REsil *esil) {
2727
REsilC *user = esil->user;
2828
char *src = r_esil_pop (esil);
29-
3029
if (!src) {
3130
return false;
3231
}
@@ -219,18 +218,17 @@ static void esil2c_setup(REsil *esil) {
219218
// r_esil_set_op (esil, "+=", esil2c_set, 0, 2, R_ESIL_OP_TYPE_REG_WRITE);
220219
}
221220

222-
R_API REsilC *r_esil_toc_new(struct r_anal_t *anal, const int bits) {
221+
R_API REsilC *r_esil_toc_new(RAnal *anal, const int bits) {
222+
R_RETURN_VAL_IF_FAIL (anal, NULL);
223223
REsilC *ec = R_NEW0 (REsilC);
224-
if (ec) {
225-
int ss = 16 * 1024;
226-
REsil *esil = r_esil_new (ss, 0, bits);
227-
if (esil) {
228-
esil2c_setup (esil);
229-
ec->anal = anal;
230-
ec->esil = esil;
231-
} else {
232-
R_FREE (ec);
233-
}
224+
int ss = 16 * 1024;
225+
REsil *esil = r_esil_new (ss, 0, bits);
226+
if (esil) {
227+
esil2c_setup (esil);
228+
ec->anal = anal;
229+
ec->esil = esil;
230+
} else {
231+
R_FREE (ec);
234232
}
235233
return ec;
236234
}
@@ -247,6 +245,7 @@ R_API void r_esil_toc_free(REsilC *ec) {
247245
}
248246

249247
R_API char *r_esil_toc(REsilC *ec, const char *expr) {
248+
R_RETURN_VAL_IF_FAIL (ec && expr, NULL);
250249
REsil *esil = ec->esil;
251250
RStrBuf *sb = r_strbuf_new ("");
252251
ec->sb = sb;

libr/esil/esil_trace.c

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,6 @@
77
#define CMP_REG_CHANGE(x, y) ((x) - ((REsilRegChange *)y)->idx)
88
#define CMP_MEM_CHANGE(x, y) ((x) - ((REsilMemChange *)y)->idx)
99

10-
// clang-format: off
11-
#define D if (false)
12-
// clang-format: on
13-
1410
R_VEC_TYPE(RVecEsilRegChange, REsilRegChange);
1511
R_VEC_TYPE(RVecEsilMemChange, REsilMemChange);
1612

@@ -172,7 +168,7 @@ static void update_last_trace_op(REsil *esil) {
172168

173169
static bool trace_hook_reg_read(REsil *esil, const char *name, ut64 *res, int *size) {
174170
R_RETURN_VAL_IF_FAIL (esil && name && res, -1);
175-
D eprintf ("%d RR %s\n", esil->trace->cur_idx, name);
171+
// D eprintf ("%d RR %s\n", esil->trace->cur_idx, name);
176172
bool ret = false;
177173
if (*name == '0') {
178174
// eprintf ("Register not found in profile\n");
@@ -194,7 +190,6 @@ static bool trace_hook_reg_read(REsil *esil, const char *name, ut64 *res, int *s
194190
return false;
195191
}
196192
access->is_reg = true;
197-
D eprintf ("emplaced a new access\n");
198193
// eprintf ("[ESIL] REG READ %s 0x%08"PFMT64x"\n", name, val);
199194
access->reg.name = strdup (name); // XXX leaks. and regnames should be constant not heap allocated
200195
access->reg.value = *res;
@@ -211,7 +206,7 @@ static bool trace_hook_reg_read(REsil *esil, const char *name, ut64 *res, int *s
211206
static bool trace_hook_reg_write(REsil *esil, const char *name, ut64 *val) {
212207
bool ret = false;
213208
// eprintf ("[ESIL] REG WRITE %s 0x%08"PFMT64x"\n", name, *val);
214-
D eprintf ("%d RW %s\n", esil->trace->cur_idx, name);
209+
// D eprintf ("%d RW %s\n", esil->trace->cur_idx, name);
215210
RRegItem *ri = r_reg_get (esil->anal->reg, name, -1);
216211
if (ri) {
217212
REsilTraceAccess *access = RVecAccess_emplace_back (&esil->trace->db.accesses);
@@ -240,7 +235,7 @@ static bool trace_hook_reg_write(REsil *esil, const char *name, ut64 *val) {
240235

241236
static bool trace_hook_mem_read(REsil *esil, ut64 addr, ut8 *buf, int len) {
242237
int ret = 0;
243-
D eprintf ("%d MR 0x%" PFMT64x " %d\n", esil->trace->cur_idx, addr, len);
238+
// D eprintf ("%d MR 0x%" PFMT64x " %d\n", esil->trace->cur_idx, addr, len);
244239
if (esil->cb.mem_read) {
245240
ret = esil->cb.mem_read (esil, addr, buf, len);
246241
}
@@ -277,7 +272,7 @@ static bool trace_hook_mem_read(REsil *esil, ut64 addr, ut8 *buf, int len) {
277272
static bool trace_hook_mem_write(REsil *esil, ut64 addr, const ut8 *buf, int len) {
278273
size_t i;
279274
int ret = 0;
280-
D eprintf ("%d MW 0x%" PFMT64x " %d\n", esil->trace->cur_idx, addr, len);
275+
// D eprintf ("%d MW 0x%" PFMT64x " %d\n", esil->trace->cur_idx, addr, len);
281276
char *hexbuf = r_hex_bin2strdup (buf, len);
282277
if (!hexbuf) {
283278
return false;
@@ -318,7 +313,6 @@ R_API void r_esil_trace_op(REsil *esil, struct r_anal_op_t *op) {
318313
return;
319314
}
320315
}
321-
D eprintf ("trace op\n");
322316
if (R_STR_ISEMPTY (expr)) {
323317
// do nothing
324318
return;
@@ -342,7 +336,6 @@ R_API void r_esil_trace_op(REsil *esil, struct r_anal_op_t *op) {
342336
REsilTraceOp *to = RVecTraceOp_emplace_back (&esil->trace->db.ops);
343337
if (to) {
344338
ut32 vec_idx = RVecAccess_length (&esil->trace->db.accesses);
345-
D eprintf ("emplaced op with xs %d\n", vec_idx);
346339
to->start = vec_idx;
347340
to->end = vec_idx;
348341
to->addr = op->addr;
@@ -405,7 +398,6 @@ static bool restore_register(REsil *esil, RRegItem *ri, int idx) {
405398

406399
R_API void r_esil_trace_restore(REsil *esil, int idx) {
407400
size_t i;
408-
D printf ("RESTORE 2\n");
409401
REsilTrace *trace = esil->trace;
410402
if (!trace) {
411403
return;
@@ -456,22 +448,21 @@ static void print_access(PrintfCallback p, int idx, REsilTraceAccess *a, int for
456448

457449
R_API void r_esil_trace_list(REsil *esil, int format) {
458450
R_RETURN_IF_FAIL (esil && esil->anal);
459-
D {
460-
ut32 vec_idx = RVecAccess_length (&esil->trace->db.accesses);
461-
int i;
462-
for (i = 0; i < vec_idx; i++) {
463-
REsilTraceAccess *xs = RVecAccess_at (&esil->trace->db.accesses, i);
464-
eprintf ("%d XS %c%c %s\n", i, xs->is_reg? 'r': 'm', xs->is_write? 'w': 'r', xs->is_reg? xs->reg.name: "");
465-
}
451+
#if 0
452+
// debug stuff
453+
ut32 vec_idx = RVecAccess_length (&esil->trace->db.accesses);
454+
int i;
455+
for (i = 0; i < vec_idx; i++) {
456+
REsilTraceAccess *xs = RVecAccess_at (&esil->trace->db.accesses, i);
457+
eprintf ("%d XS %c%c %s\n", i, xs->is_reg? 'r': 'm', xs->is_write? 'w': 'r', xs->is_reg? xs->reg.name: "");
466458
}
459+
#endif
467460
if (esil->trace) {
468461
// PrintfCallback p = esil->anal->cb_printf;
469462
int idx = 0;
470463
REsilTraceOp *op;
471464
R_VEC_FOREACH (&esil->trace->db.ops, op) {
472-
D eprintf ("---> %d | 0x%08" PFMT64x " | %d %d\n", idx, op->addr, op->start, op->end);
473-
// p ("---> %d | 0x%08"PFMT64x" | %d %d\n", idx, op->addr, op->start, op->end);
474-
// p ("%d-----\n", idx);
465+
// eprintf ("---> %d | 0x%08" PFMT64x " | %d %d\n", idx, op->addr, op->start, op->end);
475466
r_esil_trace_show (esil, idx, format);
476467
idx++;
477468
}
@@ -510,7 +501,7 @@ R_API void r_esil_trace_show(REsil *esil, int idx, int format) {
510501
}
511502
} else {
512503
ut32 last = RVecAccess_length (&esil->trace->db.accesses);
513-
R_LOG_WARN ("DETECTED CORRUPTED ACCESS %d %d", op->end, last);
504+
R_LOG_WARN ("Corrupted access detected %d %d", op->end, last);
514505
}
515506
break;
516507
}

0 commit comments

Comments
 (0)