summaryrefslogtreecommitdiff
path: root/src/gui/menus/project.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/menus/project.c')
-rw-r--r--src/gui/menus/project.c94
1 files changed, 94 insertions, 0 deletions
diff --git a/src/gui/menus/project.c b/src/gui/menus/project.c
index dbf61bc..19ced97 100644
--- a/src/gui/menus/project.c
+++ b/src/gui/menus/project.c
@@ -33,10 +33,14 @@
#include "../editem-int.h"
#include "../../analysis/binaries/file.h"
+#include "../../dialogs/shellcode.h"
#include "../../gtkext/easygtk.h"
+/* Affiche la boîte d'ajout d'un shellcode au projet courant. */
+static void mcb_project_add_shellcode(GtkMenuItem *, GMenuBar *);
+
/* Affiche la boîte d'ajout d'un binaire au projet courant. */
static void mcb_project_add_binary_file(GtkMenuItem *, GMenuBar *);
@@ -79,6 +83,10 @@ GtkWidget *build_menu_project(GObject *ref, GtkAccelGroup *accgroup, GMenuBar *b
deepmenubar = gtk_menu_new();
gtk_menu_item_set_submenu(GTK_MENU_ITEM(submenuitem), deepmenubar);
+ deepmenuitem = qck_create_menu_item(NULL, NULL, _("Shellcode"),
+ G_CALLBACK(mcb_project_add_shellcode), bar);
+ gtk_container_add(GTK_CONTAINER(deepmenubar), deepmenuitem);
+
deepmenuitem = qck_create_menu_item(NULL, NULL, _("File"),
G_CALLBACK(mcb_project_add_binary_file), bar);
gtk_container_add(GTK_CONTAINER(deepmenubar), deepmenuitem);
@@ -163,6 +171,92 @@ void update_menu_project_for_project(GtkWidget *widget, GStudyProject *project,
* Paramètres : menuitem = élément de menu sélectionné. *
* bar = barre de menu parente. *
* *
+* Description : Affiche la boîte d'ajout d'un shellcode au projet courant. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void mcb_project_add_shellcode(GtkMenuItem *menuitem, GMenuBar *bar)
+{
+ GStudyProject *project; /* Projet courant */
+ GtkWindow *parent; /* Respect de la hiérarchie */
+ GtkWidget *dialog; /* Boîte à afficher */
+
+ project = get_current_project();
+ parent = GTK_WINDOW(G_EDITOR_ITEM(bar)->ref);
+
+ dialog = NULL;
+
+ run_shellcode_assistant(project, parent);
+
+ //if (run_shellcode_assistant(project, parent)) == GTK_RESPONSE_ACCEPT)
+ {
+
+ ;
+
+
+ }
+
+#if 0
+ GtkWidget *dialog; /* Boîte à afficher */
+ char *dir; /* Répertoire courant */
+ gchar *filename; /* Nom du fichier à intégrer */
+ GLoadedBinary *binary; /* Représentation chargée */
+
+ dialog = gtk_file_chooser_dialog_new(_("Open a binary file"),
+ GTK_WINDOW(G_EDITOR_ITEM(bar)->ref),
+ GTK_FILE_CHOOSER_ACTION_OPEN,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
+ NULL);
+
+ if (g_study_project_get_filename(get_current_project()) != NULL)
+ {
+ dir = strdup(g_study_project_get_filename(get_current_project()));
+ dir = dirname(dir);
+ gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), dir);
+ free(dir);
+ }
+
+ if (g_study_project_get_filename(get_current_project()) != NULL)
+ {
+ dir = strdup(g_study_project_get_filename(get_current_project()));
+ dir = dirname(dir);
+ gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), dir);
+ free(dir);
+ }
+
+ if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
+ {
+ filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+
+ binary = g_file_binary_new_from_file(filename);
+
+ if (binary != NULL)
+ {
+ g_signal_connect(binary, "disassembly-done",
+ G_CALLBACK(g_study_project_add_loaded_binary), get_current_project());
+ g_loaded_binary_analyse(binary);
+ }
+
+ g_free(filename);
+
+ }
+
+ gtk_widget_destroy(dialog);
+#endif
+}
+
+
+
+/******************************************************************************
+* *
+* Paramètres : menuitem = élément de menu sélectionné. *
+* bar = barre de menu parente. *
+* *
* Description : Affiche la boîte d'ajout d'un binaire au projet courant. *
* *
* Retour : - *