summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--src/gui/menus/binary.c29
-rw-r--r--src/gui/menus/debug.c297
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)
+{
}