mirror of
https://github.com/radareorg/radare2.git
synced 2025-03-04 04:17:25 +00:00
Improve the interaction with decompilers in panels ##visual
This commit is contained in:
parent
e408789e34
commit
74a42f0ead
@ -1100,8 +1100,7 @@ void __update_panel_contents(RCore *core, RPanel *panel, const char *cmdstr) {
|
||||
text = newText;
|
||||
}
|
||||
} else {
|
||||
text = r_str_ansi_crop (cmdstr,
|
||||
sx, sy + graph_pad, w + sx - 3, h - 2 + sy);
|
||||
text = r_str_ansi_crop (cmdstr, sx, sy + graph_pad, w + sx - 3, h - 2 + sy);
|
||||
}
|
||||
if (text) {
|
||||
r_cons_canvas_write (can, text);
|
||||
@ -1171,7 +1170,6 @@ void __update_pdc_contents(RCore *core, RPanel *panel, char *cmdstr) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (panel->model->cmdStrCache) {
|
||||
__reset_scroll_pos (panel);
|
||||
}
|
||||
@ -1740,8 +1738,7 @@ void __handleComment(RCore *core) {
|
||||
for (i = 4, j = 4; i < len; ++i,++j) {
|
||||
char c = duped[i];
|
||||
if (c == '"' && i != (len - 1)) {
|
||||
buf[j] = '\\';
|
||||
j++;
|
||||
buf[j++] = '\\';
|
||||
buf[j] = '"';
|
||||
} else {
|
||||
buf[j] = c;
|
||||
@ -3262,14 +3259,25 @@ int __settings_decompiler_cb(void *user) {
|
||||
if (!strcmp (pdc_next, pdc_now)) {
|
||||
return 0;
|
||||
}
|
||||
r_config_set (core->config, "cmd.pdc", pdc_next);
|
||||
root->cur_pdc_cache = sdb_ptr_get (root->pdc_caches, pdc_next, 0);
|
||||
if (!root->cur_pdc_cache) {
|
||||
Sdb *sdb = sdb_new0 ();
|
||||
sdb_ptr_set (root->pdc_caches, pdc_next, sdb, 0);
|
||||
root->cur_pdc_cache = sdb;
|
||||
if (sdb) {
|
||||
sdb_ptr_set (root->pdc_caches, pdc_next, sdb, 0);
|
||||
root->cur_pdc_cache = sdb;
|
||||
}
|
||||
}
|
||||
__set_refresh_all (core, false, false);
|
||||
r_config_set (core->config, "cmd.pdc", pdc_next);
|
||||
int j = 0;
|
||||
for (j = 0; j < core->panels->n_panels; j++) {
|
||||
RPanel *panel = __get_panel (core->panels, j);
|
||||
if (!strncmp (panel->model->cmd, "pdc", 3)) {
|
||||
char *cmdstr = r_core_cmd_strf (core, "pdc@0x%08"PFMT64x, panel->model->addr);
|
||||
__update_panel_contents (core, panel, cmdstr);
|
||||
__reset_scroll_pos (panel);
|
||||
}
|
||||
}
|
||||
__set_refresh_all (core, true, false);
|
||||
__set_mode (core, PANEL_MODE_DEFAULT);
|
||||
return 0;
|
||||
}
|
||||
@ -4174,6 +4182,9 @@ void __print_decompiler_cb(void *user, void *p) {
|
||||
cmdstr = r_str_new ((char *)sdb_ptr_get (core->panels_root->cur_pdc_cache,
|
||||
r_num_as_string (NULL, func->addr, false), 0));
|
||||
}
|
||||
if (!cmdstr) {
|
||||
cmdstr = r_core_cmd_str (core, "pdc");
|
||||
}
|
||||
if (cmdstr) {
|
||||
__update_panel_contents (core, panel, cmdstr);
|
||||
return;
|
||||
@ -5236,81 +5247,81 @@ void __panels_check_stackbase(RCore *core) {
|
||||
}
|
||||
|
||||
void __init_rotate_db(RCore *core) {
|
||||
RPanels *panels = core->panels;
|
||||
sdb_ptr_set (panels->rotate_db, "pd", &__rotate_disasm_cb, 0);
|
||||
sdb_ptr_set (panels->rotate_db, "p==", &__rotate_entropy_h_cb, 0);
|
||||
sdb_ptr_set (panels->rotate_db, "p=", &__rotate_entropy_v_cb, 0);
|
||||
sdb_ptr_set (panels->rotate_db, "px", &__rotate_hexdump_cb, 0);
|
||||
sdb_ptr_set (panels->rotate_db, "dr", &__rotate_register_cb, 0);
|
||||
sdb_ptr_set (panels->rotate_db, "af", &__rotate_function_cb, 0);
|
||||
sdb_ptr_set (panels->rotate_db, PANEL_CMD_HEXDUMP, &__rotate_hexdump_cb, 0);
|
||||
Sdb *db = core->panels->rotate_db;
|
||||
sdb_ptr_set (db, "pd", &__rotate_disasm_cb, 0);
|
||||
sdb_ptr_set (db, "p==", &__rotate_entropy_h_cb, 0);
|
||||
sdb_ptr_set (db, "p=", &__rotate_entropy_v_cb, 0);
|
||||
sdb_ptr_set (db, "px", &__rotate_hexdump_cb, 0);
|
||||
sdb_ptr_set (db, "dr", &__rotate_register_cb, 0);
|
||||
sdb_ptr_set (db, "af", &__rotate_function_cb, 0);
|
||||
sdb_ptr_set (db, PANEL_CMD_HEXDUMP, &__rotate_hexdump_cb, 0);
|
||||
}
|
||||
|
||||
void __init_sdb(RCore *core) {
|
||||
RPanels *panels = core->panels;
|
||||
sdb_set (panels->db, "Symbols", "isq", 0);
|
||||
sdb_set (panels->db, "Stack" , "px 256@r:SP", 0);
|
||||
sdb_set (panels->db, "Locals", "afvd", 0);
|
||||
sdb_set (panels->db, "Registers", "dr", 0);
|
||||
sdb_set (panels->db, "RegisterRefs", "drr", 0);
|
||||
sdb_set (panels->db, "Disassembly", "pd", 0);
|
||||
sdb_set (panels->db, "Disassemble Summary", "pdsf", 0);
|
||||
sdb_set (panels->db, "Decompiler", "pdc", 0);
|
||||
sdb_set (panels->db, "Decompiler With Offsets", "pddo", 0);
|
||||
sdb_set (panels->db, "Graph", "agf", 0);
|
||||
sdb_set (panels->db, "Tiny Graph", "agft", 0);
|
||||
sdb_set (panels->db, "Info", "i", 0);
|
||||
sdb_set (panels->db, "Database", "k ***", 0);
|
||||
sdb_set (panels->db, "Console", "$console", 0);
|
||||
sdb_set (panels->db, "Hexdump", "xc $r*16", 0);
|
||||
sdb_set (panels->db, "Xrefs", "ax", 0);
|
||||
sdb_set (panels->db, "Xrefs Here", "ax.", 0);
|
||||
sdb_set (panels->db, "Functions", "afl", 0);
|
||||
sdb_set (panels->db, "Function Calls", "aflm", 0);
|
||||
sdb_set (panels->db, "Comments", "CC", 0);
|
||||
sdb_set (panels->db, "Entropy", "p=e 100", 0);
|
||||
sdb_set (panels->db, "Entropy Fire", "p==e 100", 0);
|
||||
sdb_set (panels->db, "DRX", "drx", 0);
|
||||
sdb_set (panels->db, "Sections", "iSq", 0);
|
||||
sdb_set (panels->db, "Segments", "iSSq", 0);
|
||||
sdb_set (panels->db, PANEL_TITLE_STRINGS_DATA, "izq", 0);
|
||||
sdb_set (panels->db, PANEL_TITLE_STRINGS_BIN, "izzq", 0);
|
||||
sdb_set (panels->db, "Maps", "dm", 0);
|
||||
sdb_set (panels->db, "Modules", "dmm", 0);
|
||||
sdb_set (panels->db, "Backtrace", "dbt", 0);
|
||||
sdb_set (panels->db, "Breakpoints", "db", 0);
|
||||
sdb_set (panels->db, "Imports", "iiq", 0);
|
||||
sdb_set (panels->db, "Clipboard", "yx", 0);
|
||||
sdb_set (panels->db, "New", "o", 0);
|
||||
sdb_set (panels->db, "Var READ address", "afvR", 0);
|
||||
sdb_set (panels->db, "Var WRITE address", "afvW", 0);
|
||||
sdb_set (panels->db, "Summary", "pdsf", 0);
|
||||
sdb_set (panels->db, "Classes", "icq", 0);
|
||||
sdb_set (panels->db, "Methods", "ic", 0);
|
||||
sdb_set (panels->db, "Relocs", "ir", 0);
|
||||
sdb_set (panels->db, "Headers", "iH", 0);
|
||||
sdb_set (panels->db, "File Hashes", "it", 0);
|
||||
Sdb *db= core->panels->db;
|
||||
sdb_set (db, "Symbols", "isq", 0);
|
||||
sdb_set (db, "Stack" , "px 256@r:SP", 0);
|
||||
sdb_set (db, "Locals", "afvd", 0);
|
||||
sdb_set (db, "Registers", "dr", 0);
|
||||
sdb_set (db, "RegisterRefs", "drr", 0);
|
||||
sdb_set (db, "Disassembly", "pd", 0);
|
||||
sdb_set (db, "Disassemble Summary", "pdsf", 0);
|
||||
sdb_set (db, "Decompiler", "pdc", 0);
|
||||
sdb_set (db, "Decompiler With Offsets", "pdco", 0);
|
||||
sdb_set (db, "Graph", "agf", 0);
|
||||
sdb_set (db, "Tiny Graph", "agft", 0);
|
||||
sdb_set (db, "Info", "i", 0);
|
||||
sdb_set (db, "Database", "k ***", 0);
|
||||
sdb_set (db, "Console", "$console", 0);
|
||||
sdb_set (db, "Hexdump", "xc $r*16", 0);
|
||||
sdb_set (db, "Xrefs", "ax", 0);
|
||||
sdb_set (db, "Xrefs Here", "ax.", 0);
|
||||
sdb_set (db, "Functions", "afl", 0);
|
||||
sdb_set (db, "Function Calls", "aflm", 0);
|
||||
sdb_set (db, "Comments", "CC", 0);
|
||||
sdb_set (db, "Entropy", "p=e 100", 0);
|
||||
sdb_set (db, "Entropy Fire", "p==e 100", 0);
|
||||
sdb_set (db, "DRX", "drx", 0);
|
||||
sdb_set (db, "Sections", "iSq", 0);
|
||||
sdb_set (db, "Segments", "iSSq", 0);
|
||||
sdb_set (db, PANEL_TITLE_STRINGS_DATA, "izq", 0);
|
||||
sdb_set (db, PANEL_TITLE_STRINGS_BIN, "izzq", 0);
|
||||
sdb_set (db, "Maps", "dm", 0);
|
||||
sdb_set (db, "Modules", "dmm", 0);
|
||||
sdb_set (db, "Backtrace", "dbt", 0);
|
||||
sdb_set (db, "Breakpoints", "db", 0);
|
||||
sdb_set (db, "Imports", "iiq", 0);
|
||||
sdb_set (db, "Clipboard", "yx", 0);
|
||||
sdb_set (db, "New", "o", 0);
|
||||
sdb_set (db, "Var READ address", "afvR", 0);
|
||||
sdb_set (db, "Var WRITE address", "afvW", 0);
|
||||
sdb_set (db, "Summary", "pdsf", 0);
|
||||
sdb_set (db, "Classes", "icq", 0);
|
||||
sdb_set (db, "Methods", "ic", 0);
|
||||
sdb_set (db, "Relocs", "ir", 0);
|
||||
sdb_set (db, "Headers", "iH", 0);
|
||||
sdb_set (db, "File Hashes", "it", 0);
|
||||
}
|
||||
|
||||
void __init_almighty_db(RCore *core) {
|
||||
RPanels *panels = core->panels;
|
||||
Sdb *db = core->panels->almighty_db;
|
||||
SdbKv *kv;
|
||||
SdbListIter *sdb_iter;
|
||||
SdbList *sdb_list = sdb_foreach_list (panels->db, true);
|
||||
SdbList *sdb_list = sdb_foreach_list (core->panels->db, true);
|
||||
ls_foreach (sdb_list, sdb_iter, kv) {
|
||||
char *key = sdbkv_key (kv);
|
||||
sdb_ptr_set (panels->almighty_db, r_str_new (key), &__create_panel_db, 0);
|
||||
const char *key = sdbkv_key (kv);
|
||||
sdb_ptr_set (db, r_str_new (key), &__create_panel_db, 0);
|
||||
}
|
||||
sdb_ptr_set (panels->almighty_db, "Search strings in data sections", &__search_strings_data_create, 0);
|
||||
sdb_ptr_set (panels->almighty_db, "Search strings in the whole bin", &__search_strings_bin_create, 0);
|
||||
sdb_ptr_set (panels->almighty_db, "Create New", &__create_panel_input, 0);
|
||||
sdb_ptr_set (panels->almighty_db, "Change Command of Current Panel", &__replace_current_panel_input, 0);
|
||||
sdb_ptr_set (panels->almighty_db, PANEL_TITLE_ALL_DECOMPILER, &__delegate_show_all_decompiler_cb, 0);
|
||||
sdb_ptr_set (db, "Search strings in data sections", &__search_strings_data_create, 0);
|
||||
sdb_ptr_set (db, "Search strings in the whole bin", &__search_strings_bin_create, 0);
|
||||
sdb_ptr_set (db, "Create New", &__create_panel_input, 0);
|
||||
sdb_ptr_set (db, "Change Command of Current Panel", &__replace_current_panel_input, 0);
|
||||
sdb_ptr_set (db, PANEL_TITLE_ALL_DECOMPILER, &__delegate_show_all_decompiler_cb, 0);
|
||||
if (r_config_get_i (core->config, "cfg.debug")) {
|
||||
sdb_ptr_set (panels->almighty_db, "Put Breakpoints", &__put_breakpoints_cb, 0);
|
||||
sdb_ptr_set (panels->almighty_db, "Continue", &__continue_almighty_cb, 0);
|
||||
sdb_ptr_set (panels->almighty_db, "Step", &__step_almighty_cb, 0);
|
||||
sdb_ptr_set (panels->almighty_db, "Step Over", &__step_over_almighty_cb, 0);
|
||||
sdb_ptr_set (db, "Put Breakpoints", &__put_breakpoints_cb, 0);
|
||||
sdb_ptr_set (db, "Continue", &__continue_almighty_cb, 0);
|
||||
sdb_ptr_set (db, "Step", &__step_almighty_cb, 0);
|
||||
sdb_ptr_set (db, "Step Over", &__step_over_almighty_cb, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -6095,6 +6106,7 @@ bool __draw_modal (RCore *core, RModal *modal, int range_end, int start, const c
|
||||
return true;
|
||||
}
|
||||
|
||||
// TODO: rename to modal
|
||||
void __create_almighty(RCore *core, RPanel *panel, Sdb *menu_db) {
|
||||
__set_cursor (core, false);
|
||||
const int w = 40;
|
||||
@ -6182,8 +6194,9 @@ void __exec_almighty(RCore *core, RPanel *panel, RModal *modal, Sdb *menu_db, RP
|
||||
int i = 0;
|
||||
ls_foreach (l, iter, kv) {
|
||||
if (i++ == modal->idx) {
|
||||
((RPanelAlmightyCallback)(sdb_ptr_get (menu_db, sdbkv_key (kv), 0))) (core, panel, dir, sdbkv_key (kv));
|
||||
return;
|
||||
RPanelAlmightyCallback cb = sdb_ptr_get (menu_db, sdbkv_key (kv), 0);
|
||||
cb (core, panel, dir, sdbkv_key (kv));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -7017,6 +7030,12 @@ repeat:
|
||||
if (__check_root_state (core, ROTATE)) {
|
||||
goto exit;
|
||||
}
|
||||
// all panels containing decompiler data should be cached
|
||||
if (strstr (cur->model->title, "Decomp")) {
|
||||
cur->model->cache = true;
|
||||
} else {
|
||||
cur->model->cache = false;
|
||||
}
|
||||
break;
|
||||
case 'O':
|
||||
__handle_print_rotate (core);
|
||||
|
Loading…
x
Reference in New Issue
Block a user