From 9361ac7e383839c85d536ba65722b4215e1589c0 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Sun, 15 Jan 2017 23:22:50 +0100 Subject: Prepared the GUI for the incoming debugging features. --- ChangeLog | 6 + src/gui/menus/binary.c | 29 +++++ src/gui/menus/debug.c | 297 ++++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 304 insertions(+), 28 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6244d1e..d2b3c88 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 17-01-15 Cyrille Bagard + * src/gui/menus/binary.c: + * src/gui/menus/debug.c: + Prepare the GUI for the incoming debugging features. + +17-01-15 Cyrille Bagard + * plugins/pychrysa/format/format.c: * src/analysis/disass/area.c: Fix memory leaks. diff --git a/src/gui/menus/binary.c b/src/gui/menus/binary.c index 591efcd..af6e8c4 100644 --- a/src/gui/menus/binary.c +++ b/src/gui/menus/binary.c @@ -39,6 +39,9 @@ /* Réagit au menu "Binaire -> Points d'entrée". */ static void mcb_binary_entry_points(GtkMenuItem *, GMenuBar *); +/* Réagit au menu "Binaire -> Attacher un débogueur". */ +static void mcb_binary_attach_debugger(GtkMenuItem *, GMenuBar *); + /* Réagit au menu "Binaire -> Enregistrements...". */ static void mcb_binary_storage(GtkMenuItem *, GMenuBar *); @@ -81,6 +84,13 @@ GtkWidget *build_menu_binary(GObject *ref, GtkAccelGroup *accgroup, GMenuBar *ba submenuitem = qck_create_menu_separator(); gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + submenuitem = qck_create_menu_item(ref, "mnu_binary_attach_debugger", _("Attach a debugger"), + G_CALLBACK(mcb_binary_attach_debugger), bar); + gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + + submenuitem = qck_create_menu_separator(); + gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + submenuitem = qck_create_menu_item(ref, "mnu_binary_storage", _("Storage..."), G_CALLBACK(mcb_binary_storage), bar); gtk_container_add(GTK_CONTAINER(menubar), submenuitem); @@ -180,6 +190,25 @@ static void mcb_binary_entry_points(GtkMenuItem *menuitem, GMenuBar *bar) * Paramètres : menuitem = élément de menu sélectionné. * * bar = barre de menu parente. * * * +* Description : Réagit au menu "Binaire -> Attacher un débogueur". * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void mcb_binary_attach_debugger(GtkMenuItem *menuitem, GMenuBar *bar) +{ + +} + + +/****************************************************************************** +* * +* Paramètres : menuitem = élément de menu sélectionné. * +* bar = barre de menu parente. * +* * * Description : Réagit au menu "Binaire -> Enregistrements...". * * * * Retour : - * diff --git a/src/gui/menus/debug.c b/src/gui/menus/debug.c index 9061aa2..79b5ff8 100644 --- a/src/gui/menus/debug.c +++ b/src/gui/menus/debug.c @@ -36,8 +36,38 @@ -/* Réagit avec le menu "Débogage -> Démarrer/Arrêter". */ -static void mcb_debug_start_stop(GtkMenuItem *, GObject *); +/* Réagit avec le menu "Débogage -> Continuer". */ +static void mcb_debug_continue(GtkMenuItem *, GObject *); + +/* Réagit avec le menu "Débogage -> Continuer jusqu'à...". */ +static void mcb_debug_continue_to(GtkMenuItem *, GObject *); + +/* Réagit avec le menu "Débogage -> Mettre en pause". */ +static void mcb_debug_pause(GtkMenuItem *, GObject *); + +/* Réagit avec le menu "Débogage -> Redémarrer". */ +static void mcb_debug_restart(GtkMenuItem *, GObject *); + +/* Réagit avec le menu "Débogage -> Arrêter". */ +static void mcb_debug_close(GtkMenuItem *, GObject *); + +/* Réagit avec le menu "Débogage -> Avancer pas à pas en ...". */ +static void mcb_debug_step_into(GtkMenuItem *, GObject *); + +/* Réagit avec le menu "Débogage -> Avancer pas à pas en ...". */ +static void mcb_debug_step_over(GtkMenuItem *, GObject *); + +/* Réagit avec le menu "Débogage -> Visiter les blocs ...". */ +static void mcb_debug_visit_blocks_into(GtkMenuItem *, GObject *); + +/* Réagit avec le menu "Débogage -> Visiter les blocs ...". */ +static void mcb_debug_visit_blocks_over(GtkMenuItem *, GObject *); + +/* Réagit avec le menu "Débogage -> Continuer jusqu'au retour". */ +static void mcb_debug_return(GtkMenuItem *, GObject *); + +/* Réagit avec le menu "Débogage -> Options de débogage". */ +static void mcb_debug_options(GtkMenuItem *, GObject *); @@ -66,13 +96,64 @@ GtkWidget *build_menu_debug(GObject *ref, GtkAccelGroup *accgroup) menubar = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(result), menubar); - submenuitem = qck_create_menu_item(ref, "mnu_start_stop", _("Start"), G_CALLBACK(mcb_debug_start_stop), ref); + submenuitem = qck_create_menu_item(ref, "mnu_debug_continue", _("Continue"), + G_CALLBACK(mcb_debug_continue), ref); add_accelerator_to_menu_item(submenuitem, "F9", accgroup); gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + submenuitem = qck_create_menu_item(ref, "mnu_debug_continue_to", _("Continue to selection"), + G_CALLBACK(mcb_debug_continue_to), ref); + add_accelerator_to_menu_item(submenuitem, "F9", accgroup); + gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + + submenuitem = qck_create_menu_item(ref, "mnu_debug_pause", _("Pause"), + G_CALLBACK(mcb_debug_pause), ref); + add_accelerator_to_menu_item(submenuitem, "F10", accgroup); + gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + + submenuitem = qck_create_menu_item(ref, "mnu_debug_restart", _("Restart"), + G_CALLBACK(mcb_debug_restart), ref); + gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + + submenuitem = qck_create_menu_item(ref, "mnu_debug_close", _("Close"), + G_CALLBACK(mcb_debug_close), ref); + gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + submenuitem = qck_create_menu_separator(); gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + submenuitem = qck_create_menu_item(ref, "mnu_debug_step_into", _("Step into"), + G_CALLBACK(mcb_debug_step_into), ref); + add_accelerator_to_menu_item(submenuitem, "F7", accgroup); + gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + + submenuitem = qck_create_menu_item(ref, "mnu_debug_step_over", _("Step over"), + G_CALLBACK(mcb_debug_step_over), ref); + add_accelerator_to_menu_item(submenuitem, "F7", accgroup); + gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + + submenuitem = qck_create_menu_item(ref, "mnu_debug_basic", _("Visit basic blocks into"), + G_CALLBACK(mcb_debug_visit_blocks_into), ref); + add_accelerator_to_menu_item(submenuitem, "F8", accgroup); + gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + + submenuitem = qck_create_menu_item(ref, "mnu_debug_basic", _("Visit basic blocks over"), + G_CALLBACK(mcb_debug_visit_blocks_over), ref); + add_accelerator_to_menu_item(submenuitem, "F8", accgroup); + gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + + submenuitem = qck_create_menu_item(ref, "mnu_debug_return", _("Continue until return"), + G_CALLBACK(mcb_debug_return), ref); + add_accelerator_to_menu_item(submenuitem, "F12", accgroup); + gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + + submenuitem = qck_create_menu_separator(); + gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + + submenuitem = qck_create_menu_item(ref, "mnu_debug_options", _("Debugging options..."), + G_CALLBACK(mcb_debug_options), ref); + gtk_container_add(GTK_CONTAINER(menubar), submenuitem); + return result; } @@ -83,7 +164,140 @@ GtkWidget *build_menu_debug(GObject *ref, GtkAccelGroup *accgroup) * Paramètres : menuitem = élément de menu sélectionné. * * ref = adresse de l'espace de référencement global. * * * -* Description : Réagit avec le menu "Débogage -> Démarrer/Arrêter". * +* Description : Réagit avec le menu "Débogage -> Continuer". * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void mcb_debug_continue(GtkMenuItem *menuitem, GObject *ref) +{ + +} + + +/****************************************************************************** +* * +* Paramètres : menuitem = élément de menu sélectionné. * +* ref = adresse de l'espace de référencement global. * +* * +* Description : Réagit avec le menu "Débogage -> Continuer jusqu'à...". * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void mcb_debug_continue_to(GtkMenuItem *menuitem, GObject *ref) +{ + +} + + +/****************************************************************************** +* * +* Paramètres : menuitem = élément de menu sélectionné. * +* ref = adresse de l'espace de référencement global. * +* * +* Description : Réagit avec le menu "Débogage -> Mettre en pause". * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void mcb_debug_pause(GtkMenuItem *menuitem, GObject *ref) +{ + +} + + +/****************************************************************************** +* * +* Paramètres : menuitem = élément de menu sélectionné. * +* ref = adresse de l'espace de référencement global. * +* * +* Description : Réagit avec le menu "Débogage -> Redémarrer". * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void mcb_debug_restart(GtkMenuItem *menuitem, GObject *ref) +{ + +} + + +/****************************************************************************** +* * +* Paramètres : menuitem = élément de menu sélectionné. * +* ref = adresse de l'espace de référencement global. * +* * +* Description : Réagit avec le menu "Débogage -> Arrêter". * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void mcb_debug_close(GtkMenuItem *menuitem, GObject *ref) +{ + +} + + +/****************************************************************************** +* * +* Paramètres : menuitem = élément de menu sélectionné. * +* ref = adresse de l'espace de référencement global. * +* * +* Description : Réagit avec le menu "Débogage -> Avancer pas à pas en ...". * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void mcb_debug_step_into(GtkMenuItem *menuitem, GObject *ref) +{ + +} + + +/****************************************************************************** +* * +* Paramètres : menuitem = élément de menu sélectionné. * +* ref = adresse de l'espace de référencement global. * +* * +* Description : Réagit avec le menu "Débogage -> Avancer pas à pas en ...". * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void mcb_debug_step_over(GtkMenuItem *menuitem, GObject *ref) +{ + +} + + +/****************************************************************************** +* * +* Paramètres : menuitem = élément de menu sélectionné. * +* ref = adresse de l'espace de référencement global. * +* * +* Description : Réagit avec le menu "Débogage -> Visiter les blocs ...". * * * * Retour : - * * * @@ -91,37 +305,64 @@ GtkWidget *build_menu_debug(GObject *ref, GtkAccelGroup *accgroup) * * ******************************************************************************/ -static void mcb_debug_start_stop(GtkMenuItem *menuitem, GObject *ref) +static void mcb_debug_visit_blocks_into(GtkMenuItem *menuitem, GObject *ref) { - //GLoadedBinary *binary; /* Edition courante */ - GBinaryDebugger *debugger; /* Module prêt à emploi */ - //binary = (GLoadedBinary *)g_object_get_data(ref, "current_binary"); - debugger = NULL;//get_main_debugger_for_binary(get_current_openida_project(), binary); +} - if (debugger == NULL) - { - log_simple_message(LMT_ERROR, _("No available debug module for this binary !")); - return; - } - if (strcmp(gtk_menu_item_get_label(menuitem), _("Start")) == 0) - { - if (!g_binary_debugger_attach(debugger)) - { - log_simple_message(LMT_ERROR, _("Failed to initialize the debugger.")); - return; - } +/****************************************************************************** +* * +* Paramètres : menuitem = élément de menu sélectionné. * +* ref = adresse de l'espace de référencement global. * +* * +* Description : Réagit avec le menu "Débogage -> Visiter les blocs ...". * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ - gtk_menu_item_set_label(menuitem, _("Stop")); +static void mcb_debug_visit_blocks_over(GtkMenuItem *menuitem, GObject *ref) +{ - } - else - { - /* TODO */ +} - gtk_menu_item_set_label(menuitem, _("Start")); - } +/****************************************************************************** +* * +* Paramètres : menuitem = élément de menu sélectionné. * +* ref = adresse de l'espace de référencement global. * +* * +* Description : Réagit avec le menu "Débogage -> Continuer jusqu'au retour". * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void mcb_debug_return(GtkMenuItem *menuitem, GObject *ref) +{ + +} + + +/****************************************************************************** +* * +* Paramètres : menuitem = élément de menu sélectionné. * +* ref = adresse de l'espace de référencement global. * +* * +* Description : Réagit avec le menu "Débogage -> Options de débogage". * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void mcb_debug_options(GtkMenuItem *menuitem, GObject *ref) +{ } -- cgit v0.11.2-87-g4458