Handle debug tracing information in ESIL steps

This commit is contained in:
pancake 2015-01-30 02:07:47 +01:00
parent d15d4daa25
commit 4d1a555dbc
3 changed files with 12 additions and 6 deletions

View file

@ -1220,13 +1220,13 @@ static void esil_step(RCore *core, ut64 until_addr, const char *until_expr) {
//eprintf ("PC=0x%llx\n", (ut64)addr);
}
if (core->anal->esil->delay)
addr=core->anal->esil->delay_addr;
addr = core->anal->esil->delay_addr;
r_io_read_at (core->io, addr, code, sizeof (code));
r_asm_set_pc (core->assembler, addr);
ret = r_anal_op (core->anal, &op, addr, code, sizeof (code));
core->anal->esil->delay = op.delay;
if (core->anal->esil->delay)
core->anal->esil->delay_addr=addr+op.size;
core->anal->esil->delay_addr = addr+op.size;
#if 0
eprintf ("RET %d\n", ret);
eprintf ("ADDR 0x%llx\n", addr);
@ -1258,6 +1258,12 @@ sleep (1);
op.size = 1; // avoid inverted stepping
r_reg_setv (core->anal->reg, name, addr + op.size);
}
if (core->dbg->trace->enabled) {
RReg *reg = core->dbg->reg;
core->dbg->reg = core->anal->reg;
r_debug_trace_pc (core->dbg);
core->dbg->reg = reg;
}
// check addr
if (until_addr != UT64_MAX) {
if (addr == until_addr) {

View file

@ -1050,14 +1050,14 @@ static void r_core_cmd_bp(RCore *core, const char *input) {
case 'e':
for (p=input+3; *p==' ';p++);
if (*p == '*') {
r_bp_set_trace_all(core->dbg->bp,R_TRUE);
r_bp_set_trace_all (core->dbg->bp,R_TRUE);
} else if (!r_bp_set_trace (core->dbg->bp, addr, R_TRUE))
eprintf ("Cannot set tracepoint\n");
break;
case 'd':
for (p=input+3; *p==' ';p++);
if (*p == '*') {
r_bp_set_trace_all(core->dbg->bp,R_FALSE);
r_bp_set_trace_all (core->dbg->bp,R_FALSE);
} else if (!r_bp_set_trace (core->dbg->bp, addr, R_FALSE))
eprintf ("Cannot unset tracepoint\n");
break;

View file

@ -1,4 +1,4 @@
/* radare - LGPL - Copyright 2009-2014 - pancake, TheLemonMan */
/* radare - LGPL - Copyright 2009-2015 - pancake, TheLemonMan */
#include <r_debug.h>
#include <r_anal.h>
@ -54,7 +54,7 @@ static int r_debug_recoil(RDebug *dbg) {
}
R_API RDebug *r_debug_new(int hard) {
RDebug *dbg = R_NEW (RDebug);
RDebug *dbg = R_NEW0 (RDebug);
if (dbg) {
// R_SYS_ARCH
dbg->arch = r_sys_arch_id (R_SYS_ARCH); // 0 is native by default