diff options
Diffstat (limited to 'src/analysis')
-rw-r--r-- | src/analysis/Makefile.am | 1 | ||||
-rw-r--r-- | src/analysis/binary.c | 101 | ||||
-rw-r--r-- | src/analysis/binary.h | 3 | ||||
-rw-r--r-- | src/analysis/loaded-int.h | 10 | ||||
-rw-r--r-- | src/analysis/loaded.c | 48 | ||||
-rw-r--r-- | src/analysis/loaded.h | 6 | ||||
-rw-r--r-- | src/analysis/roptions.c | 238 | ||||
-rw-r--r-- | src/analysis/roptions.h | 101 |
8 files changed, 42 insertions, 466 deletions
diff --git a/src/analysis/Makefile.am b/src/analysis/Makefile.am index 20a02b6..3ba21a3 100644 --- a/src/analysis/Makefile.am +++ b/src/analysis/Makefile.am @@ -11,7 +11,6 @@ libanalysis_la_SOURCES = \ loaded.h loaded.c \ loading.h loading.c \ project.h project.c \ - roptions.h roptions.c \ routine.h routine.c \ type-int.h \ type.h type.c \ diff --git a/src/analysis/binary.c b/src/analysis/binary.c index 222bafc..89370b2 100644 --- a/src/analysis/binary.c +++ b/src/analysis/binary.c @@ -89,8 +89,7 @@ struct _GLoadedBinary size_t decbuf_count; /* Taille des tableaux */ size_t defsrc; /* Fichier source principal */ - bool col_display[BVW_COUNT][BLC_DISPLAY];/* Position et code binaire */ - bool lines_display; /* Affichage des lignes */ + GDisplayOptions *options[BVW_COUNT]; /* Options d'affichage */ }; @@ -173,10 +172,7 @@ static GtkWidget *g_loaded_binary_build_view(GLoadedBinary *, unsigned int); static unsigned int g_loaded_binary_get_view_index(GLoadedBinary *, GtkWidget *); /* Fournit toutes les options d'affichage pour un contenu. */ -bool * const g_loaded_binary_get_all_display_options(const GLoadedBinary *, unsigned int); - -/* Définit une option d'affichage pour un contenu chargé. */ -static bool g_loaded_binary_set_display_option(GLoadedBinary *, unsigned int, unsigned int, bool); +static GDisplayOptions *g_loaded_binary_get_display_options(const GLoadedBinary *, unsigned int); @@ -242,14 +238,17 @@ static void g_loaded_binary_init(GLoadedBinary *binary) binary->collections = create_collections_list(); attach_binary_to_collections(binary->collections, binary); - binary->col_display[BVW_BLOCK][BLC_PHYSICAL] = true; - binary->col_display[BVW_BLOCK][BLC_VIRTUAL] = true; - binary->col_display[BVW_BLOCK][BLC_BINARY] = false; - binary->col_display[BVW_GRAPH][BLC_PHYSICAL] = false; - binary->col_display[BVW_GRAPH][BLC_VIRTUAL] = false; - binary->col_display[BVW_GRAPH][BLC_BINARY] = false; + binary->options[BVW_BLOCK] = g_display_options_new(); + + g_display_options_add(binary->options[BVW_BLOCK], _("Physical offset"), true); + g_display_options_add(binary->options[BVW_BLOCK], _("Virtual address"), true); + g_display_options_add(binary->options[BVW_BLOCK], _("Binary code"), false); + + binary->options[BVW_GRAPH] = g_display_options_new(); - binary->lines_display = true; + g_display_options_add(binary->options[BVW_GRAPH], _("Physical offset"), false); + g_display_options_add(binary->options[BVW_GRAPH], _("Virtual address"), false); + g_display_options_add(binary->options[BVW_GRAPH], _("Binary code"), false); } @@ -282,8 +281,7 @@ static void g_loaded_binary_interface_init(GLoadedContentInterface *iface) iface->build_view = (build_loaded_view_fc)g_loaded_binary_build_view; iface->get_view_index = (get_loaded_view_index_fc)g_loaded_binary_get_view_index; - iface->get_all_options = (get_all_loaded_options_fc)g_loaded_binary_get_all_display_options; - iface->set_option = (set_loaded_option_fc)g_loaded_binary_set_display_option; + iface->get_options = (get_loaded_options_fc)g_loaded_binary_get_display_options; } @@ -302,6 +300,8 @@ static void g_loaded_binary_interface_init(GLoadedContentInterface *iface) static void g_loaded_binary_dispose(GLoadedBinary *binary) { + BinaryView i; /* Boucle de parcours */ + if (binary->format != NULL) g_object_unref(G_OBJECT(binary->format)); @@ -310,6 +310,11 @@ static void g_loaded_binary_dispose(GLoadedBinary *binary) /* TODO... */ + + + for (i = 0; i < BVW_COUNT; i++) + g_object_unref(G_OBJECT(binary->options[i])); + G_OBJECT_CLASS(g_loaded_binary_parent_class)->dispose(G_OBJECT(binary)); } @@ -1379,25 +1384,6 @@ GCodeBuffer *g_loaded_binary_get_decompiled_buffer(const GLoadedBinary *binary, #endif -/****************************************************************************** -* * -* Paramètres : binary = élément binaire à consulter. * -* * -* Description : Indique si les lignes doivent apparaître dans le rendu. * -* * -* Retour : Consigne d'affichage. [OUT] * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool *g_loaded_binary_display_decomp_lines(GLoadedBinary *binary) -{ - return &binary->lines_display; - -} - - /* ---------------------------------------------------------------------------------- */ /* GESTION SOUS FORME DE CONTENU CHARGE */ @@ -1536,6 +1522,7 @@ static bool g_loaded_binary_analyze(GLoadedBinary *binary, wgroup_id_t gid, GtkS GBinFormat *format; /* Format lié au binaire */ const char *arch; /* Architecture d'exécution */ const char *desc; /* Description humaine associée*/ + bool has_virt; /* Présence de virtuel ? */ GProcContext *context; /* Contexte de suivi dédié */ GWidthTracker *tracker; /* Gestionnaire de largeur */ @@ -1567,7 +1554,10 @@ static bool g_loaded_binary_analyze(GLoadedBinary *binary, wgroup_id_t gid, GtkS goto glba_exit; } - binary->col_display[BVW_BLOCK][BLC_VIRTUAL] = g_arch_processor_has_virtual_space(binary->proc); + has_virt = g_arch_processor_has_virtual_space(binary->proc); + + g_display_options_set(binary->options[BVW_BLOCK], BLC_VIRTUAL, has_virt); + g_display_options_set(binary->options[BVW_GRAPH], BLC_VIRTUAL, has_virt); /* Phase de désassemblage pur */ @@ -1741,42 +1731,19 @@ static unsigned int g_loaded_binary_get_view_index(GLoadedBinary *binary, GtkWid * * ******************************************************************************/ -bool * const g_loaded_binary_get_all_display_options(const GLoadedBinary *binary, unsigned int index) +static GDisplayOptions *g_loaded_binary_get_display_options(const GLoadedBinary *binary, unsigned int index) { - return binary->col_display[index]; - -} + GDisplayOptions *result; /* Instance à renvoyer */ + assert(index < BVW_COUNT); -/****************************************************************************** -* * -* Paramètres : binary = contenu chargé à consulter. * -* index = composant graphique à cibler. * -* option = type de paramètre à manipuler. * -* state = valeur dudit paramètre. * -* * -* Description : Définit une option d'affichage pour un contenu chargé. * -* * -* Retour : true si un changement a été effectué, false sinon. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static bool g_loaded_binary_set_display_option(GLoadedBinary *binary, unsigned int index, unsigned int option, bool state) -{ - bool result; /* Variation à faire remonter */ - bool old; /* Ancien état à remplacer */ - - old = binary->col_display[index][option]; - - if (state != old) - { - binary->col_display[index][option] = state; - result = true; - } + if (index < BVW_COUNT) + result = binary->options[index]; + else + result = NULL; - else result = false; + if (result != NULL) + g_object_ref(G_OBJECT(result)); return result; diff --git a/src/analysis/binary.h b/src/analysis/binary.h index 906469a..cbaab41 100644 --- a/src/analysis/binary.h +++ b/src/analysis/binary.h @@ -167,9 +167,6 @@ GBufferCache *g_loaded_binary_get_disassembled_cache(const GLoadedBinary *); /* Fournit le tampon associé au contenu d'un fichier source. */ //GCodeBuffer *g_loaded_binary_get_decompiled_buffer(const GLoadedBinary *, size_t); -/* Indique si les lignes doivent apparaître dans le rendu. */ -bool *g_loaded_binary_display_decomp_lines(GLoadedBinary *); - diff --git a/src/analysis/loaded-int.h b/src/analysis/loaded-int.h index 7d4bb19..044dad7 100644 --- a/src/analysis/loaded-int.h +++ b/src/analysis/loaded-int.h @@ -58,10 +58,7 @@ typedef GtkWidget * (* build_loaded_view_fc) (GLoadedContent *, unsigned int); typedef unsigned int (* get_loaded_view_index_fc) (GLoadedContent *, GtkWidget *); /* Fournit toutes les options d'affichage pour un contenu. */ -typedef bool * const (* get_all_loaded_options_fc) (const GLoadedContent *, unsigned int); - -/* Définit une option d'affichage pour un contenu. */ -typedef bool ( * set_loaded_option_fc) (GLoadedContent *, unsigned int, unsigned int, bool); +typedef GDisplayOptions * (* get_loaded_options_fc) (const GLoadedContent *, unsigned int); /* Accès à un contenu binaire quelconque (interface) */ @@ -85,15 +82,12 @@ struct _GLoadedContentIface build_loaded_view_fc build_view; /* Mise en place de vues */ get_loaded_view_index_fc get_view_index;/* Récupération d'indice de vue*/ - get_all_loaded_options_fc get_all_options; /* Obtention de liste brute*/ - set_loaded_option_fc set_option; /* Définition d'affichage */ + get_loaded_options_fc get_options; /* Obtention de liste d'options*/ /* Signaux */ void (* analyzed) (GLoadedContent *, gboolean); - void (* display_changed) (GLoadedContent *, unsigned int, unsigned int); - }; diff --git a/src/analysis/loaded.c b/src/analysis/loaded.c index 5359103..28aea43 100644 --- a/src/analysis/loaded.c +++ b/src/analysis/loaded.c @@ -135,14 +135,6 @@ static void g_loaded_content_default_init(GLoadedContentInterface *iface) g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN); - g_signal_new("display-changed", - G_TYPE_LOADED_CONTENT, - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET(GLoadedContentIface, display_changed), - NULL, NULL, - g_cclosure_user_marshal_VOID__ENUM_ENUM, - G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT); - } @@ -471,60 +463,28 @@ unsigned int g_loaded_content_get_view_index(GLoadedContent *content, GtkWidget * * * Description : Fournit toutes les options d'affichage pour un contenu. * * * -* Retour : Tableau de paramètres en accès libre. * +* Retour : Gestionnaire de paramètres. * * * * Remarques : - * * * ******************************************************************************/ -bool * const g_loaded_content_get_all_display_options(const GLoadedContent *content, unsigned int index) +GDisplayOptions *g_loaded_content_get_display_options(const GLoadedContent *content, unsigned int index) { - bool const *result; /* Accès aux options à renvoyer*/ + GDisplayOptions *result; /* Accès aux options à renvoyer*/ GLoadedContentIface *iface; /* Interface utilisée */ assert(index <= g_loaded_content_count_views(content)); iface = G_LOADED_CONTENT_GET_IFACE(content); - result = iface->get_all_options(content, index); + result = iface->get_options(content, index); return result; } -/****************************************************************************** -* * -* Paramètres : content = contenu chargé à consulter. * -* index = composant graphique à cibler. * -* option = type de paramètre à manipuler. * -* state = valeur dudit paramètre. * -* * -* Description : Définit une option d'affichage pour un contenu chargé. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void g_loaded_content_set_display_option(GLoadedContent *content, unsigned int index, unsigned int option, bool state) -{ - GLoadedContentIface *iface; /* Interface utilisée */ - bool changed; /* Note un changement */ - - assert(index <= g_loaded_content_count_views(content)); - - iface = G_LOADED_CONTENT_GET_IFACE(content); - - changed = iface->set_option(content, index, option, state); - - if (changed) - g_signal_emit_by_name(content, "display-changed", index, option); - -} - - /* ---------------------------------------------------------------------------------- */ /* PHASE D'ANALYSE EN PARALLELE */ diff --git a/src/analysis/loaded.h b/src/analysis/loaded.h index 344d102..66d448a 100644 --- a/src/analysis/loaded.h +++ b/src/analysis/loaded.h @@ -32,6 +32,7 @@ #include "content.h" #include "../common/xml.h" +#include "../glibext/gdisplayoptions.h" #include "../gtkext/gtkdockstation.h" @@ -93,10 +94,7 @@ GtkWidget *g_loaded_content_build_view(GLoadedContent *, unsigned int); unsigned int g_loaded_content_get_view_index(GLoadedContent *, GtkWidget *); /* Fournit toutes les options d'affichage pour un contenu. */ -bool * const g_loaded_content_get_all_display_options(const GLoadedContent *, unsigned int); - -/* Définit une option d'affichage pour un contenu chargé. */ -void g_loaded_content_set_display_option(GLoadedContent *, unsigned int, unsigned int, bool); +GDisplayOptions *g_loaded_content_get_display_options(const GLoadedContent *, unsigned int); diff --git a/src/analysis/roptions.c b/src/analysis/roptions.c deleted file mode 100644 index b9e4b96..0000000 --- a/src/analysis/roptions.c +++ /dev/null @@ -1,238 +0,0 @@ - -/* Chrysalide - Outil d'analyse de fichiers binaires - * roptions.c - options de rendus des lignes de code - * - * Copyright (C) 2009-2017 Cyrille Bagard - * - * This file is part of Chrysalide. - * - * Chrysalide is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * Chrysalide is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Chrysalide. If not, see <http://www.gnu.org/licenses/>. - */ - - -#include "roptions.h" - - - -/* Options de représentation (instance) */ -struct _GRenderingOptions -{ - GExeFormat *format; /* Format du contenu bianire */ - GArchProcessor *proc; /* Architecture utilisée */ - - bool show_address[MRD_COUNT]; /* Affichage de l'adresse ? */ - bool show_code[MRD_COUNT]; /* Affichage du code brut ? */ - -}; - -/* Options de représentation (classe) */ -struct _GRenderingOptionsClass -{ - GObjectClass parent; /* A laisser en premier */ - -}; - - -/* Initialise la classe des options pour le rendu des lignes. */ -static void g_rendering_options_class_init(GRenderingOptionsClass *); - -/* Initialise une instance d'options pour le rendu des lignes. */ -static void g_rendering_options_init(GRenderingOptions *); - - - -/* Indique le type définit pour une ligne de représentation. */ -G_DEFINE_TYPE(GRenderingOptions, g_rendering_options, G_TYPE_OBJECT); - - -/****************************************************************************** -* * -* Paramètres : klass = classe à initialiser. * -* * -* Description : Initialise la classe des options pour le rendu des lignes. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void g_rendering_options_class_init(GRenderingOptionsClass *klass) -{ - -} - - -/****************************************************************************** -* * -* Paramètres : options = instance à initialiser. * -* * -* Description : Initialise une instance d'options pour le rendu des lignes. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void g_rendering_options_init(GRenderingOptions *options) -{ - -} - - -/****************************************************************************** -* * -* Paramètres : format = format du contenu binaire. * -* * -* Description : Crée un un groupe d'options pour le rendu des lignes. * -* * -* Retour : Adresse de la structure mise en place. * -* * -* Remarques : - * -* * -******************************************************************************/ - -GRenderingOptions *g_rendering_options_new(GExeFormat *format) -{ - GRenderingOptions *result; /* Structure à retourner */ - - result = g_object_new(G_TYPE_RENDERING_OPTIONS, NULL); - - result->format = format; - result->proc = NULL;//get_arch_processor_from_format(format); - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : options = options à consulter. * -* * -* Description : Fournit le format du contenu binaire représenté. * -* * -* Retour : Format du contenu binaire. * -* * -* Remarques : - * -* * -******************************************************************************/ - -GExeFormat *g_rendering_options_get_format(const GRenderingOptions *options) -{ - return options->format; - -} - - -/****************************************************************************** -* * -* Paramètres : options = options à consulter. * -* * -* Description : Fournit l'architecture du contenu binaire représenté. * -* * -* Retour : Architecture utilisée par le binaire. * -* * -* Remarques : - * -* * -******************************************************************************/ - -GArchProcessor *g_rendering_options_get_processor(const GRenderingOptions *options) -{ - return options->proc; - -} - - -/****************************************************************************** -* * -* Paramètres : options = options à mettre à jour. * -* rendering = type de rendu impliqué. * -* state = nouvel état de l'option visée. * -* * -* Description : Affiche (ou non) les adresses des instructions. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void g_rendering_options_show_address(GRenderingOptions *options, MainRendering rendering, bool state) -{ - options->show_address[rendering] = state; - -} - - -/****************************************************************************** -* * -* Paramètres : options = options à consulter. * -* rendering = type de rendu impliqué. * -* * -* Description : Indique si les adresses des instructions sont à afficher. * -* * -* Retour : Etat courant de l'option visée. * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool g_rendering_options_has_to_show_address(const GRenderingOptions *options, MainRendering rendering) -{ - return options->show_address[rendering]; - -} - - -/****************************************************************************** -* * -* Paramètres : options = options à mettre à jour. * -* rendering = type de rendu impliqué. * -* state = nouvel état de l'option visée. * -* * -* Description : Affiche (ou non) le code des instructions. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void g_rendering_options_show_code(GRenderingOptions *options, MainRendering rendering, bool state) -{ - options->show_code[rendering] = state; - -} - - -/****************************************************************************** -* * -* Paramètres : options = options à consulter. * -* rendering = type de rendu impliqué. * -* * -* Description : Indique si le code des instructions est à afficher. * -* * -* Retour : Etat courant de l'option visée. * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool g_rendering_options_has_to_show_code(const GRenderingOptions *options, MainRendering rendering) -{ - return options->show_code[rendering]; - -} diff --git a/src/analysis/roptions.h b/src/analysis/roptions.h deleted file mode 100644 index 1f27ff5..0000000 --- a/src/analysis/roptions.h +++ /dev/null @@ -1,101 +0,0 @@ - -/* Chrysalide - Outil d'analyse de fichiers binaires - * roptions.h - prototypes pour les options de rendus des lignes de code - * - * Copyright (C) 2009-2017 Cyrille Bagard - * - * This file is part of Chrysalide. - * - * Chrysalide is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * Chrysalide is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Chrysalide. If not, see <http://www.gnu.org/licenses/>. - */ - - -#ifndef _ANALYSIS_ROPTIONS_H -#define _ANALYSIS_ROPTIONS_H - - -#include <glib-object.h> -#include <stdbool.h> - - -#include "../arch/processor.h" -#include "../format/executable.h" - - - -/* Support principal de rendu */ -typedef enum _MainRendering -{ - MRD_BLOCK, /* Unique bloc de code */ - MRD_GRAPH, /* Graphique de blocs de code */ - - MRD_COUNT - -} MainRendering; - - -/* Zone de rendu */ -typedef enum _ShowingArea -{ - SAR_ADDRESS, /* Adresse d'une ligne */ - SAR_CODE, /* Code brut d'une ligne */ - SAR_INSTRUCTION, /* Instruction d'une ligne */ - - SAR_COUNT - -} ShowingArea; - - -#define G_TYPE_RENDERING_OPTIONS g_rendering_options_get_type() -#define G_RENDERING_OPTIONS(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), G_TYPE_RENDERING_OPTIONS, GRenderingOptions)) -#define G_IS_RENDERING_OPTIONS(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), G_TYPE_RENDERING_OPTIONS)) -#define G_RENDERING_OPTIONS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_RENDERING_OPTIONS, GRenderingOptionsClass)) -#define G_IS_RENDERING_OPTIONS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_RENDERING_OPTIONS)) -#define G_RENDERING_OPTIONS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_RENDERING_OPTIONS, GRenderingOptionsClass)) - - -/* Options de représentation (instance) */ -typedef struct _GRenderingOptions GRenderingOptions; - -/* Options de représentation (classe) */ -typedef struct _GRenderingOptionsClass GRenderingOptionsClass; - - -/* Indique le type défini pour des options de représentation. */ -GType g_rendering_options_get_type(void); - -/* Crée un un groupe d'options pour le rendu des lignes. */ -GRenderingOptions *g_rendering_options_new(GExeFormat *); - -/* Fournit le format du contenu binaire représenté. */ -GExeFormat *g_rendering_options_get_format(const GRenderingOptions *); - -/* Fournit l'architecture du contenu binaire représenté. */ -GArchProcessor *g_rendering_options_get_processor(const GRenderingOptions *); - -/* Affiche (ou non) les adresses des instructions. */ -void g_rendering_options_show_address(GRenderingOptions *, MainRendering, bool); - -/* Indique si les adresses des instructions sont à afficher. */ -bool g_rendering_options_has_to_show_address(const GRenderingOptions *, MainRendering); - -/* Affiche (ou non) le code des instructions. */ -void g_rendering_options_show_code(GRenderingOptions *, MainRendering, bool); - -/* Indique si le code des instructions est à afficher. */ -bool g_rendering_options_has_to_show_code(const GRenderingOptions *, MainRendering); - - - -#endif /* _ANALYSIS_ROPTIONS_H */ |