From 9361ac7e383839c85d536ba65722b4215e1589c0 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
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 <nocbos@gmail.com>
 
+	* src/gui/menus/binary.c:
+	* src/gui/menus/debug.c:
+	Prepare the GUI for the incoming debugging features.
+
+17-01-15  Cyrille Bagard <nocbos@gmail.com>
+
 	* 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, "<Alt>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, "<Alt>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, "<Alt>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