Refactor to use API in visual panels mode (#556)
This commit is contained in:
parent
3b4ed65c66
commit
aa3558b294
6 changed files with 62 additions and 61 deletions
|
|
@ -3,6 +3,7 @@
|
|||
#include <rz_core.h>
|
||||
#include <rz_debug.h>
|
||||
#include "core_private.h"
|
||||
#include "cmd_descs.h"
|
||||
|
||||
static bool is_x86_call(RzDebug *dbg, ut64 addr) {
|
||||
ut8 buf[3];
|
||||
|
|
@ -66,6 +67,15 @@ RZ_API bool rz_core_debug_step_one(RzCore *core, int times) {
|
|||
return true;
|
||||
}
|
||||
|
||||
RZ_IPI void rz_core_debug_continue(RzCore *core) {
|
||||
if (rz_config_get_b(core->config, "cfg.debug")) {
|
||||
rz_debug_continue_oldhandler(core, "");
|
||||
} else {
|
||||
rz_core_esil_step(core, UT64_MAX, "0", NULL, false);
|
||||
rz_core_regs2flags(core);
|
||||
}
|
||||
}
|
||||
|
||||
RZ_API bool rz_core_debug_continue_until(RzCore *core, ut64 addr, ut64 to) {
|
||||
ut64 pc;
|
||||
if (!strcmp(core->dbg->btalgo, "trace") && core->dbg->arch && !strcmp(core->dbg->arch, "x86") && core->dbg->bits == 4) {
|
||||
|
|
@ -511,3 +521,17 @@ RZ_API void rz_core_debug_ri(RzCore *core, RzReg *reg, int mode) {
|
|||
rz_list_free(sorted);
|
||||
ht_up_free(db);
|
||||
}
|
||||
|
||||
RZ_IPI void rz_core_debug_breakpoint_toggle(RzCore *core, ut64 addr) {
|
||||
RzBreakpointItem *bpi = rz_bp_get_at(core->dbg->bp, addr);
|
||||
if (bpi) {
|
||||
rz_bp_del(core->dbg->bp, addr);
|
||||
} else {
|
||||
int hwbp = rz_config_get_i(core->config, "dbg.hwbp");
|
||||
bpi = rz_debug_bp_add(core->dbg, addr, hwbp, false, 0, NULL, 0);
|
||||
if (!bpi) {
|
||||
eprintf("Cannot set breakpoint at 0x%" PFMT64x "\n", addr);
|
||||
}
|
||||
}
|
||||
rz_bp_enable(core->dbg->bp, addr, true, 0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3528,19 +3528,7 @@ static void rz_core_cmd_bp(RzCore *core, const char *input) {
|
|||
break;
|
||||
case 's': // "dbs"
|
||||
addr = rz_num_math(core->num, input + 2);
|
||||
bpi = rz_bp_get_at(core->dbg->bp, addr);
|
||||
if (bpi) {
|
||||
//bp->enabled = !bp->enabled;
|
||||
// XXX(jjd): this ^^ is what I would think toggling means...
|
||||
rz_bp_del(core->dbg->bp, addr);
|
||||
} else {
|
||||
// XXX(jjd): does t his need an address validity check??
|
||||
bpi = rz_debug_bp_add(core->dbg, addr, hwbp, false, 0, NULL, 0);
|
||||
if (!bpi) {
|
||||
eprintf("Cannot set breakpoint (%s)\n", input + 2);
|
||||
}
|
||||
}
|
||||
rz_bp_enable(core->dbg->bp, rz_num_math(core->num, input + 2), true, 0);
|
||||
rz_core_debug_breakpoint_toggle(core, addr);
|
||||
break;
|
||||
case 'n': // "dbn"
|
||||
bpi = rz_bp_get_at(core->dbg->bp, core->offset);
|
||||
|
|
|
|||
|
|
@ -137,35 +137,34 @@ static bool nextpal_item(RzCore *core, int mode, const char *file, int ctr) {
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool cmd_load_theme(RzCore *core, const char *_arg) {
|
||||
RZ_IPI bool rz_core_load_theme(RzCore *core, const char *name) {
|
||||
bool failed = false;
|
||||
char *path;
|
||||
if (!_arg || !*_arg) {
|
||||
if (!name || !*name) {
|
||||
return false;
|
||||
}
|
||||
if (!rz_str_cmp(_arg, "default", strlen(_arg))) {
|
||||
curtheme = strdup(_arg);
|
||||
if (!rz_str_cmp(name, "default", strlen(name))) {
|
||||
curtheme = strdup(name);
|
||||
rz_cons_pal_init(core->cons->context);
|
||||
return true;
|
||||
}
|
||||
char *arg = strdup(_arg);
|
||||
|
||||
char *tmp = rz_str_newf(RZ_JOIN_2_PATHS(RZ_HOME_THEMES, "%s"), arg);
|
||||
char *tmp = rz_str_newf(RZ_JOIN_2_PATHS(RZ_HOME_THEMES, "%s"), name);
|
||||
char *home = tmp ? rz_str_home(tmp) : NULL;
|
||||
free(tmp);
|
||||
|
||||
tmp = rz_str_newf(RZ_JOIN_2_PATHS(RZ_THEMES, "%s"), arg);
|
||||
tmp = rz_str_newf(RZ_JOIN_2_PATHS(RZ_THEMES, "%s"), name);
|
||||
path = tmp ? rz_str_rz_prefix(tmp) : NULL;
|
||||
free(tmp);
|
||||
|
||||
if (!load_theme(core, home)) {
|
||||
if (load_theme(core, path)) {
|
||||
curtheme = rz_str_dup(curtheme, arg);
|
||||
curtheme = rz_str_dup(curtheme, name);
|
||||
} else {
|
||||
if (load_theme(core, arg)) {
|
||||
curtheme = rz_str_dup(curtheme, arg);
|
||||
if (load_theme(core, name)) {
|
||||
curtheme = rz_str_dup(curtheme, name);
|
||||
} else {
|
||||
char *absfile = rz_file_abspath(arg);
|
||||
char *absfile = rz_file_abspath(name);
|
||||
eprintf("eco: cannot open colorscheme profile (%s)\n", absfile);
|
||||
free(absfile);
|
||||
failed = true;
|
||||
|
|
@ -174,7 +173,6 @@ static bool cmd_load_theme(RzCore *core, const char *_arg) {
|
|||
}
|
||||
free(home);
|
||||
free(path);
|
||||
free(arg);
|
||||
return !failed;
|
||||
}
|
||||
|
||||
|
|
@ -299,7 +297,7 @@ done:
|
|||
//rz_core_theme_nextpal (core, mode);
|
||||
} else if (mode == 'n' || mode == 'p') {
|
||||
if (curtheme) {
|
||||
cmd_load_theme(core, curtheme);
|
||||
rz_core_load_theme(core, curtheme);
|
||||
}
|
||||
}
|
||||
rz_list_free(files);
|
||||
|
|
@ -339,9 +337,9 @@ RZ_IPI int rz_eval_color(void *data, const char *input) {
|
|||
if (input[1] == 'j') {
|
||||
rz_core_theme_nextpal(core, 'j');
|
||||
} else if (input[1] == ' ') {
|
||||
cmd_load_theme(core, input + 2);
|
||||
rz_core_load_theme(core, input + 2);
|
||||
} else if (input[1] == 'o') {
|
||||
cmd_load_theme(core, rz_core_get_theme());
|
||||
rz_core_load_theme(core, rz_core_get_theme());
|
||||
} else if (input[1] == 'c' || input[1] == '.') {
|
||||
rz_cons_printf("%s\n", rz_core_get_theme());
|
||||
} else if (input[1] == '?') {
|
||||
|
|
|
|||
|
|
@ -13,5 +13,9 @@ RZ_IPI bool rz_core_debug_reg_set(RzCore *core, const char *regname, ut64 val, c
|
|||
RZ_IPI bool rz_core_debug_reg_list(RzCore *core, int type, int size, PJ *pj, int rad, const char *use_color);
|
||||
RZ_IPI void rz_core_debug_regs2flags(RzCore *core, int bits);
|
||||
RZ_IPI void rz_core_regs2flags(RzCore *core);
|
||||
RZ_IPI void rz_core_debug_breakpoint_toggle(RzCore *core, ut64 addr);
|
||||
RZ_IPI void rz_core_debug_continue(RzCore *core);
|
||||
|
||||
/* cmd_eval.c */
|
||||
RZ_IPI bool rz_core_load_theme(RzCore *core, const char *name);
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -580,7 +580,6 @@ static void __esil_step_to(RzCore *core, ut64 end);
|
|||
static void __panel_breakpoint(RzCore *core);
|
||||
static void __panel_single_step_in(RzCore *core);
|
||||
static void __panel_single_step_over(RzCore *core);
|
||||
static void __panel_continue(RzCore *core);
|
||||
|
||||
/* zoom mode */
|
||||
static void __save_panel_pos(RzPanel *panel);
|
||||
|
|
@ -1646,8 +1645,7 @@ void __handleComment(RzCore *core) {
|
|||
addr = orig = core->offset;
|
||||
if (core->print->cur_enabled) {
|
||||
addr += core->print->cur;
|
||||
rz_core_seek(core, addr, false);
|
||||
rz_core_cmdf(core, "s 0x%" PFMT64x, addr);
|
||||
rz_core_seek_and_save(core, addr, false);
|
||||
}
|
||||
if (!strcmp(buf + i, "-")) {
|
||||
strcpy(buf, "CC-");
|
||||
|
|
@ -1828,7 +1826,7 @@ bool __handle_cursor_mode(RzCore *core, const int key) {
|
|||
break;
|
||||
case '*':
|
||||
if (__check_panel_type(cur, PANEL_CMD_DISASSEMBLY)) {
|
||||
rz_core_cmdf(core, "dr PC=0x%08" PFMT64x, core->offset + print->cur);
|
||||
rz_core_debug_reg_set(core, "PC", core->offset + print->cur, NULL);
|
||||
__set_panel_addr(core, cur, core->offset + print->cur);
|
||||
}
|
||||
break;
|
||||
|
|
@ -3216,7 +3214,7 @@ int __settings_colors_cb(void *user) {
|
|||
RzPanelsMenuItem *parent = menu->history[menu->depth - 1];
|
||||
RzPanelsMenuItem *child = parent->sub[parent->selectedIndex];
|
||||
rz_str_ansi_filter(child->name, NULL, NULL, -1);
|
||||
rz_core_cmdf(core, "eco %s", child->name);
|
||||
rz_core_load_theme(core, child->name);
|
||||
int i;
|
||||
for (i = 1; i < menu->depth; i++) {
|
||||
RzPanel *p = menu->history[i]->p;
|
||||
|
|
@ -3514,7 +3512,7 @@ int __reload_cb(void *user) {
|
|||
|
||||
int __function_cb(void *user) {
|
||||
RzCore *core = (RzCore *)user;
|
||||
rz_core_cmdf(core, "af");
|
||||
rz_core_analysis_function_add(core, NULL, core->offset, false);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -3556,7 +3554,7 @@ int __break_points_cb(void *user) {
|
|||
core->cons->line->prompt_type = RZ_LINE_PROMPT_DEFAULT;
|
||||
|
||||
ut64 addr = rz_num_math(core->num, buf);
|
||||
rz_core_cmdf(core, "dbs 0x%08" PFMT64x, addr);
|
||||
rz_core_debug_breakpoint_toggle(core, addr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -4071,7 +4069,7 @@ void __esil_init(RzCore *core) {
|
|||
}
|
||||
|
||||
void __esil_step_to(RzCore *core, ut64 end) {
|
||||
rz_core_cmdf(core, "aesu 0x%08" PFMT64x, end);
|
||||
rz_core_esil_step(core, end, NULL, NULL, false);
|
||||
}
|
||||
|
||||
int __open_menu_cb(void *user) {
|
||||
|
|
@ -4797,10 +4795,10 @@ void __do_panels_refreshOneShot(RzCore *core) {
|
|||
|
||||
void __panel_single_step_in(RzCore *core) {
|
||||
if (rz_config_get_b(core->config, "cfg.debug")) {
|
||||
rz_core_cmd(core, "ds", 0);
|
||||
rz_core_debug_step_one(core, 1);
|
||||
rz_core_debug_regs2flags(core, 0);
|
||||
} else {
|
||||
rz_core_cmd(core, "aes", 0);
|
||||
rz_core_esil_step(core, UT64_MAX, NULL, NULL, false);
|
||||
rz_core_regs2flags(core);
|
||||
}
|
||||
}
|
||||
|
|
@ -4821,15 +4819,11 @@ void __panel_single_step_over(RzCore *core) {
|
|||
void __panel_breakpoint(RzCore *core) {
|
||||
RzPanel *cur = __get_cur_panel(core->panels);
|
||||
if (__check_panel_type(cur, PANEL_CMD_DISASSEMBLY)) {
|
||||
rz_core_cmd(core, "dbs $$", 0);
|
||||
rz_core_debug_breakpoint_toggle(core, core->offset);
|
||||
cur->view->refresh = true;
|
||||
}
|
||||
}
|
||||
|
||||
void __panel_continue(RzCore *core) {
|
||||
rz_debug_continue_oldhandler(core, "");
|
||||
}
|
||||
|
||||
void __panels_check_stackbase(RzCore *core) {
|
||||
if (!core || !core->panels) {
|
||||
return;
|
||||
|
|
@ -5156,7 +5150,7 @@ void __handle_menu(RzCore *core, const int key) {
|
|||
}
|
||||
break;
|
||||
case '$':
|
||||
rz_core_cmd0(core, "dr PC=$$");
|
||||
rz_core_debug_reg_set(core, "PC", core->offset, NULL);
|
||||
break;
|
||||
case ' ':
|
||||
case '\r':
|
||||
|
|
@ -5519,7 +5513,8 @@ void __insert_value(RzCore *core) {
|
|||
if (creg) {
|
||||
const char *prompt = "new-reg-value> ";
|
||||
__panel_prompt(prompt, buf, sizeof(buf));
|
||||
rz_core_cmdf(core, "dr %s = %s", creg, buf);
|
||||
ut64 regval = rz_num_math(core->num, buf);
|
||||
rz_core_debug_reg_set(core, creg, regval, buf);
|
||||
cur->view->refresh = true;
|
||||
}
|
||||
} else if (__check_panel_type(cur, PANEL_CMD_DISASSEMBLY)) {
|
||||
|
|
@ -6417,9 +6412,9 @@ repeat:
|
|||
break;
|
||||
case '$':
|
||||
if (core->print->cur_enabled) {
|
||||
rz_core_cmdf(core, "dr PC=$$+%d", core->print->cur);
|
||||
rz_core_debug_reg_set(core, "PC", core->offset + core->print->cur, NULL);
|
||||
} else {
|
||||
rz_core_cmd0(core, "dr PC=$$");
|
||||
rz_core_debug_reg_set(core, "PC", core->offset, NULL);
|
||||
}
|
||||
break;
|
||||
case 's':
|
||||
|
|
@ -6817,7 +6812,7 @@ repeat:
|
|||
(void)rz_core_cmd0(core, cmd);
|
||||
} else {
|
||||
if (__check_panel_type(cur, PANEL_CMD_DISASSEMBLY)) {
|
||||
__panel_continue(core);
|
||||
rz_core_debug_continue(core);
|
||||
__set_panel_addr(core, cur, core->offset);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -810,16 +810,7 @@ static void __core_visual_step_over(RzCore *core) {
|
|||
}
|
||||
|
||||
static void visual_breakpoint(RzCore *core) {
|
||||
rz_core_cmd(core, "dbs $$", 0);
|
||||
}
|
||||
|
||||
static void visual_continue(RzCore *core) {
|
||||
if (rz_config_get_b(core->config, "cfg.debug")) {
|
||||
rz_debug_continue_oldhandler(core, "");
|
||||
} else {
|
||||
rz_core_cmd(core, "aec", 0);
|
||||
rz_core_regs2flags(core);
|
||||
}
|
||||
rz_core_debug_breakpoint_toggle(core, core->offset);
|
||||
}
|
||||
|
||||
static int visual_nkey(RzCore *core, int ch) {
|
||||
|
|
@ -897,7 +888,7 @@ static int visual_nkey(RzCore *core, int ch) {
|
|||
if (cmd && *cmd) {
|
||||
ch = rz_core_cmd0(core, cmd);
|
||||
} else {
|
||||
visual_continue(core);
|
||||
rz_core_debug_continue(core);
|
||||
}
|
||||
break;
|
||||
case RZ_CONS_KEY_F10:
|
||||
|
|
@ -2679,7 +2670,8 @@ RZ_API int rz_core_visual_cmd(RzCore *core, const char *arg) {
|
|||
if (*buf) {
|
||||
const char *creg = core->dbg->creg;
|
||||
if (creg) {
|
||||
rz_core_cmdf(core, "dr %s = %s\n", creg, buf);
|
||||
ut64 regval = rz_num_math(core->num, buf);
|
||||
rz_core_debug_reg_set(core, creg, regval, buf);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
|
@ -3369,7 +3361,7 @@ RZ_API int rz_core_visual_cmd(RzCore *core, const char *arg) {
|
|||
break;
|
||||
case 'B': {
|
||||
ut64 addr = core->print->cur_enabled ? core->offset + core->print->cur : core->offset;
|
||||
rz_core_cmdf(core, "dbs 0x%08" PFMT64x, addr);
|
||||
rz_core_debug_breakpoint_toggle(core, addr);
|
||||
} break;
|
||||
case 'u':
|
||||
rz_core_visual_seek_animation_undo(core);
|
||||
|
|
|
|||
Loading…
Reference in a new issue