summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2008-10-30 18:35:47 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2008-10-30 18:35:47 (GMT)
commit7c7109c1a8aaedea40af4b96d4b81d6ba4496226 (patch)
tree471709f8bccae04f492d03017a1e94d0ca48b962
parent8a30afc05eed869865ba4dc9c107119f7ec00fe4 (diff)
Displayed all found strings on binary loading.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@40 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
-rw-r--r--ChangeLog35
-rw-r--r--src/Makefile.am1
-rw-r--r--src/arch/processor-int.h4
-rw-r--r--src/arch/processor.c58
-rw-r--r--src/arch/x86/processor.c1
-rw-r--r--src/binary.c3
-rw-r--r--src/binary.h2
-rw-r--r--src/easygtk.c41
-rw-r--r--src/easygtk.h3
-rw-r--r--src/editor.c42
-rw-r--r--src/format/elf/e_elf.c59
-rw-r--r--src/format/exe_format-int.h4
-rw-r--r--src/format/exe_format.c22
-rw-r--r--src/format/exe_format.h12
-rw-r--r--src/pan_strings.c155
-rw-r--r--src/pan_strings.h45
-rw-r--r--src/pan_symbols.c7
-rw-r--r--src/pan_symbols.h4
18 files changed, 483 insertions, 15 deletions
diff --git a/ChangeLog b/ChangeLog
index b9dbaf5..13ebfed 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,38 @@
+2008-10-30 Cyrille Bagard <nocbos@gmail.com>
+
+ * src/arch/processor.c:
+ * src/arch/processor-int.h:
+ * src/arch/x86/processor.c:
+ Remove the CR & LF characters when printing strings.
+
+ * src/binary.c:
+ * src/binary.h:
+ Display all found strings on binary loading.
+
+ * src/easygtk.c:
+ * src/easygtk.h:
+ Add a function which builds a notebook widget.
+
+ * src/editor.c:
+ Build the bottom of the editor.
+
+ * src/format/elf/e_elf.c:
+ * src/format/exe_format.c:
+ * src/format/exe_format.h:
+ * src/format/exe_format-int.h:
+ Begin to rename the function providing the list of all resolved items.
+
+ * src/Makefile.am:
+ Add pan_strings.[ch] to openida_SOURCES.
+
+ * src/pan_strings.c:
+ * src/pan_strings.h:
+ New entries: display all found strings.
+
+ * src/pan_symbols.c:
+ * src/pan_symbols.h:
+ Typo.
+
2008-10-29 Cyrille Bagard <nocbos@gmail.com>
* src/arch/x86/op_call.c:
diff --git a/src/Makefile.am b/src/Makefile.am
index b1e31cd..2dec03f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -8,6 +8,7 @@ openida_SOURCES = \
editor.c \
gtksnippet.h gtksnippet.c \
gtkcodeview.h gtkcodeview.c \
+ pan_strings.h pan_strings.c \
pan_symbols.h pan_symbols.c \
project.h project.c \
xdg.h xdg.c \
diff --git a/src/arch/processor-int.h b/src/arch/processor-int.h
index 5dc12ff..6ceb7df 100644
--- a/src/arch/processor-int.h
+++ b/src/arch/processor-int.h
@@ -63,5 +63,9 @@ struct _asm_processor
+/* S'assure qu'une chaîne de caractère tient sur une ligne. */
+char *escape_crlf_bin_string(char *);
+
+
#endif /* _ARCH_PROCESSOR_INT_H */
diff --git a/src/arch/processor.c b/src/arch/processor.c
index 1afb576..17f88b3 100644
--- a/src/arch/processor.c
+++ b/src/arch/processor.c
@@ -24,6 +24,10 @@
#include "processor.h"
+#include <regex.h>
+#include <string.h>
+
+
#include "instruction-int.h"
#include "processor-int.h"
@@ -84,6 +88,60 @@ asm_instr *decode_instruction(const asm_processor *proc, const uint8_t *data, of
/******************************************************************************
* *
+* Paramètres : input = chaîne de caractères à traiter. *
+* *
+* Description : S'assure qu'une chaîne de caractère tient sur une ligne. *
+* *
+* Retour : Adresse de la chaîne de caractères modifiée. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+char *escape_crlf_bin_string(char *input)
+{
+ size_t inlen;
+ regex_t preg;
+ int ret;
+ size_t curpos;
+ regmatch_t pmatch[2];
+
+ inlen = strlen(input);
+
+ ret = regcomp(&preg, "(\t|\n|\r)", REG_EXTENDED | REG_ICASE);
+ /* TODO: ret */
+
+ for (curpos = 0; regexec(&preg, &input[curpos], 2, pmatch, 0) != REG_NOMATCH; )
+ {
+ inlen += 1 + 1;
+ input = (char *)realloc(input, inlen * sizeof(char *));
+
+ memmove(&input[curpos + pmatch[1].rm_eo + 1], &input[curpos + pmatch[1].rm_eo], inlen - 1 - curpos - pmatch[1].rm_eo);
+
+ switch (input[curpos + pmatch[1].rm_so])
+ {
+ case '\t':
+ memcpy(&input[curpos + pmatch[1].rm_so], "\\t", 2);
+ break;
+ case '\n':
+ memcpy(&input[curpos + pmatch[1].rm_so], "\\n", 2);
+ break;
+ case '\r':
+ memcpy(&input[curpos + pmatch[1].rm_so], "\\r", 2);
+ break;
+ }
+
+ curpos += pmatch[1].rm_eo + 1;
+
+ }
+
+ return input;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : proc = architecture visée par la procédure. *
* format = format du binaire manipulé. *
* instr = instruction à traiter. *
diff --git a/src/arch/x86/processor.c b/src/arch/x86/processor.c
index 8cc3a72..8be503c 100644
--- a/src/arch/x86/processor.c
+++ b/src/arch/x86/processor.c
@@ -509,6 +509,7 @@ void x86_print_instruction(const asm_x86_processor *proc, const exe_format *form
break;
case STP_STRING:
+ label = escape_crlf_bin_string(label);
snprintf(&opbuffer[i][oplen], 256 - oplen, " \"%s\"", label);
break;
diff --git a/src/binary.c b/src/binary.c
index f9cc906..cc3fd70 100644
--- a/src/binary.c
+++ b/src/binary.c
@@ -340,7 +340,7 @@ uint8_t *map_binary_file(const char *filename, size_t *length)
-void fill_snippet(GtkSnippet *snippet, GtkWidget *panel)
+void fill_snippet(GtkSnippet *snippet, GtkWidget *panel, GtkWidget *panel2)
{
off_t length;
uint8_t *bin_data;
@@ -503,6 +503,7 @@ void fill_snippet(GtkSnippet *snippet, GtkWidget *panel)
}
handle_new_exe_on_symbols_panel(panel, format);
+ handle_new_exe_on_strings_panel(panel2, format);
}
diff --git a/src/binary.h b/src/binary.h
index e1cc97b..8a36a02 100644
--- a/src/binary.h
+++ b/src/binary.h
@@ -64,7 +64,7 @@ bool write_openida_binary_to_xml(const openida_binary *, xmlTextWriterPtr);
-void fill_snippet(GtkSnippet *snippet, GtkWidget *panel);
+void fill_snippet(GtkSnippet *snippet, GtkWidget *panel, GtkWidget *panel2);
diff --git a/src/easygtk.c b/src/easygtk.c
index 93ba653..4eb5bcd 100644
--- a/src/easygtk.c
+++ b/src/easygtk.c
@@ -58,11 +58,10 @@ GtkWidget *qck_create_padded_alignment(guint pt, guint pb, guint pl, guint pr)
* *
* Paramètres : caption = contenu de l'étiqutte à placer. *
* alignment = conteneur réel à utiliser pour la suite. [OUT] *
-* pt = espace imposé à la zone supérieure. *
-* pb = espace imposé à la zone inférieure. *
-* pl = espace imposé à la zone gauche. *
-* pr = espace imposé à la zone droite. *
-* *
+* pt = espace imposé à la zone supérieure. *
+* pb = espace imposé à la zone inférieure. *
+* pl = espace imposé à la zone gauche. *
+* pr = espace imposé à la zone droite. *
* *
* Description : Met en place une frame. *
* *
@@ -96,6 +95,38 @@ GtkWidget *qck_create_frame(const char *caption, GtkWidget **alignment, guint pt
/******************************************************************************
* *
+* Paramètres : object = espace dédié à l'inscription de références. *
+* name = nom à donner au nouveau composant. *
+* *
+* Description : Met en place un support à onglets. *
+* *
+* Retour : Composant 'GtkWidget' ici créé. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+GtkWidget *qck_create_notebook(GObject *object, const char *name)
+{
+ GtkWidget *result; /* Instance à renvoyer */
+
+ result = gtk_notebook_new();
+
+ if (G_IS_OBJECT(object) && name != NULL)
+ {
+ gtk_widget_ref(result);
+ g_object_set_data_full(object, name, result, (GtkDestroyNotify)gtk_widget_unref);
+ }
+
+ gtk_widget_show(result);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : object = espace dédié à l'inscription de références. *
* name = nom à donner au nouveau composant. *
* caption = intitulé apparaissant sur le composant. *
diff --git a/src/easygtk.h b/src/easygtk.h
index 7499815..cfd5b1a 100644
--- a/src/easygtk.h
+++ b/src/easygtk.h
@@ -35,6 +35,9 @@ GtkWidget *qck_create_padded_alignment(guint, guint, guint, guint);
/* Met en place une frame. */
GtkWidget *qck_create_frame(const char *, GtkWidget **, guint, guint, guint, guint);
+/* Met en place un support à onglets. */
+GtkWidget *qck_create_notebook(GObject *, const char *);
+
/* Crée un composant 'GtkLabel'. */
GtkWidget *qck_create_label(GObject *, const char *, const char *);
diff --git a/src/editor.c b/src/editor.c
index 0673110..a07301f 100644
--- a/src/editor.c
+++ b/src/editor.c
@@ -54,6 +54,7 @@
#include "easygtk.h"
#include "gtksnippet.h"
#include "gtkcodeview.h"
+#include "pan_strings.h"
#include "pan_symbols.h"
@@ -429,10 +430,17 @@ GtkWidget *create_editor(void)
GtkWidget *codeview;
GtkWidget *panel;
+ GtkWidget *_panel;
+
openida_project *project;
+ GtkWidget *notebook; /* Support à onglets */
+ GtkWidget *label; /* Etiquette pour onglet */
+
+
+
#if 0
GtkWidget *vbox; /* Support à divisions vert. */
GtkWidget *notebook; /* Support à onglets */
@@ -560,6 +568,9 @@ GtkWidget *create_editor(void)
panel = build_symbols_panel(G_OBJECT(result));
gtk_paned_pack2 (GTK_PANED (hpaned1), panel, TRUE, TRUE);
+ _panel = panel;
+
+
label1 = gtk_label_new (_("Registres :"));
gtk_widget_show (label1);
gtk_fixed_put (GTK_FIXED (fixed1), label1, 16, 48);
@@ -724,6 +735,27 @@ GtkWidget *create_editor(void)
(GtkAttachOptions) (0), 0, 0);
gtk_misc_set_alignment (GTK_MISC (label21), 0, 0.5);
+
+
+
+ /* Panneau inférieur */
+
+ notebook = qck_create_notebook(NULL, NULL);
+ gtk_paned_pack2(GTK_PANED(vpaned1), notebook, FALSE, FALSE);
+
+ panel = build_strings_panel(G_OBJECT(result));
+ gtk_container_add(GTK_CONTAINER(notebook), panel);
+
+ label = qck_create_label(NULL, NULL, _("Strings"));
+ gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook), gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), 0), label);
+
+
+
+
+
+
+ /*
+
scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_show (scrolledwindow1);
gtk_paned_pack2 (GTK_PANED (vpaned1), scrolledwindow1, TRUE, TRUE);
@@ -732,6 +764,10 @@ GtkWidget *create_editor(void)
gtk_widget_show (textview1);
gtk_container_add (GTK_CONTAINER (scrolledwindow1), textview1);
+
+ */
+
+
statusbar1 = gtk_statusbar_new ();
gtk_widget_show (statusbar1);
gtk_box_pack_start (GTK_BOX (vbox1), statusbar1, FALSE, FALSE, 0);
@@ -757,7 +793,11 @@ GtkWidget *create_editor(void)
- fill_snippet(textview2, panel);
+ /* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */
+ fill_snippet(textview2, _panel, panel);
+
+
+
return result;
diff --git a/src/format/elf/e_elf.c b/src/format/elf/e_elf.c
index a9eacea..48b4455 100644
--- a/src/format/elf/e_elf.c
+++ b/src/format/elf/e_elf.c
@@ -35,6 +35,13 @@
+/* S'assure qu'une chaîne de caractère tient sur une ligne. */
+extern char *escape_crlf_bin_string(char *);
+
+
+/* Récupère tous les éléments identifiées dans le binaire. */
+size_t get_elf_resolved_items(const elf_format *, char ***, ResolvedType **, uint64_t **);
+
@@ -73,6 +80,7 @@ elf_format *load_elf(const uint8_t *content, off_t length)
EXE_FORMAT(result)->get_def_parts = (get_def_parts_fc)get_elf_default_code_parts;
EXE_FORMAT(result)->find_section = (find_section_fc)find_elf_section_content_by_name;
EXE_FORMAT(result)->get_symbols = (get_symbols_fc)get_elf_symbols;
+ EXE_FORMAT(result)->get_resolved = (get_resolved_fc)get_elf_resolved_items;
EXE_FORMAT(result)->resolve_symbol = (resolve_symbol_fc)resolve_elf_symbol;
memcpy(&result->header, content, sizeof(Elf32_Ehdr));
@@ -264,6 +272,57 @@ size_t get_elf_symbols(const elf_format *format, char ***labels, SymbolType **ty
/******************************************************************************
* *
+* Paramètres : format = informations chargées à consulter. *
+* labels = liste des commentaires à insérer. [OUT] *
+* types = type des symboles listés. [OUT] *
+* offsets = liste des indices des commentaires. [OUT] *
+* *
+* Description : Récupère tous les éléments identifiées dans le binaire. *
+* *
+* Retour : Nombre d'éléments mis en place. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+size_t get_elf_resolved_items(const elf_format *format, char ***labels, ResolvedType **types, uint64_t **offsets)
+{
+ size_t result; /* Quantité à retourner */
+ size_t i; /* Boucle de parcours */
+ size_t start; /* Point de départ du tour */
+
+ result = format->sym_count + format->str_count;
+
+ *labels = (char **)calloc(result, sizeof(char *));
+ *types = (SymbolType *)calloc(result, sizeof(SymbolType));
+ *offsets = (uint64_t *)calloc(result, sizeof(uint64_t));
+
+ for (i = 0; i < format->sym_count; i++)
+ {
+ (*labels)[i] = strdup(format->symbols[i].name);
+ (*types)[i] = RTP_SECTION;
+ (*offsets)[i] = format->symbols[i].address;
+ }
+
+ start = format->sym_count;
+
+ for (i = 0; i < format->str_count; i++)
+ {
+ (*labels)[start + i] = strndup(format->strings[i].value, format->strings[i].len);
+ (*types)[start + i] = RTP_STRING;
+ (*offsets)[start + i] = format->strings[i].vaddress;
+
+ (*labels)[start + i] = escape_crlf_bin_string((*labels)[start + i]);
+
+ }
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : format = informations chargées à consulter. *
* label = étiquette du symbole si trouvé. [OUT] *
* type = type du symbole trouvé. [OUT] *
diff --git a/src/format/exe_format-int.h b/src/format/exe_format-int.h
index 4dcf1c4..2fdb673 100644
--- a/src/format/exe_format-int.h
+++ b/src/format/exe_format-int.h
@@ -57,6 +57,9 @@ typedef bool (* find_section_fc) (const exe_format *, const char *, off_t *, off
/* Récupère tous les symboles présents dans le contenu binaire. */
typedef size_t (* get_symbols_fc) (const exe_format *, char ***, SymbolType **, uint64_t **);
+/* Récupère tous les symboles présents dans le contenu binaire. */
+typedef size_t (* get_resolved_fc) (const exe_format *, char ***, ResolvedType **, uint64_t **);
+
/* Recherche le symbole correspondant à une adresse. */
typedef bool (* resolve_symbol_fc) (const exe_format *, char **, SymbolType *, uint64_t *);
@@ -71,6 +74,7 @@ struct _exe_format
get_def_parts_fc get_def_parts; /* Liste des parties de code */
find_section_fc find_section; /* Recherche d'une section */
get_symbols_fc get_symbols; /* Liste des symboles présents */
+ get_resolved_fc get_resolved; /* Liste des éléments présents */
resolve_symbol_fc resolve_symbol; /* Recherche de symboles */
};
diff --git a/src/format/exe_format.c b/src/format/exe_format.c
index bc6cfff..30976f1 100644
--- a/src/format/exe_format.c
+++ b/src/format/exe_format.c
@@ -213,6 +213,28 @@ size_t get_exe_symbols(const exe_format *format, char ***labels, SymbolType **ty
/******************************************************************************
* *
+* Paramètres : format = informations chargées à consulter. *
+* labels = liste des commentaires à insérer. [OUT] *
+* types = type des symboles listés. [OUT] *
+* offsets = liste des indices des commentaires. [OUT] *
+* *
+* Description : Récupère tous les éléments identifiées dans le binaire. *
+* *
+* Retour : Nombre d'éléments mis en place. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+size_t get_exe_resolved_items(const exe_format *format, char ***labels, ResolvedType **types, uint64_t **offsets)
+{
+ return format->get_resolved(format, labels, types, offsets);
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : format = informations chargées à consulter. *
* label = étiquette du symbole si trouvé. [OUT] *
* type = type du symbole trouvé. [OUT] *
diff --git a/src/format/exe_format.h b/src/format/exe_format.h
index 53257fb..9be91fb 100644
--- a/src/format/exe_format.h
+++ b/src/format/exe_format.h
@@ -69,6 +69,15 @@ typedef enum _SymbolType
} SymbolType;
+/* Types de symbole */
+typedef enum _ResolvedType
+{
+ RTP_SECTION, /* Simple morceau de code */
+ RTP_STRING /* Chaîne de caractères */
+
+} ResolvedType;
+
+
/* Recherche une section donnée au sein de binaire. */
bool find_exe_section(const exe_format *, const char *, off_t *, off_t *, uint64_t *);
@@ -76,6 +85,9 @@ bool find_exe_section(const exe_format *, const char *, off_t *, off_t *, uint64
/* Récupère tous les symboles présents dans le contenu binaire. */
size_t get_exe_symbols(const exe_format *, char ***, SymbolType **, uint64_t **);
+/* Récupère tous les éléments identifiées dans le binaire. */
+size_t get_exe_resolved_items(const exe_format *, char ***, ResolvedType **, uint64_t **);
+
/* Recherche le symbole correspondant à une adresse. */
bool resolve_exe_symbol(const exe_format *, char **, SymbolType *, uint64_t *);
diff --git a/src/pan_strings.c b/src/pan_strings.c
new file mode 100644
index 0000000..0b5a951
--- /dev/null
+++ b/src/pan_strings.c
@@ -0,0 +1,155 @@
+
+/* OpenIDA - Outil d'analyse de fichiers binaires
+ * pan_strings.c - panneau d'affichage des chaînes de caractères
+ *
+ * Copyright (C) 2006-2007 Cyrille Bagard
+ *
+ * This file is part of OpenIDA.
+ *
+ * OpenIDA 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.
+ *
+ * OpenIDA 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
+#include "pan_strings.h"
+
+
+/* Colonnes de la liste des symboles */
+typedef enum _StringsColumn
+{
+ STC_ADDRESS, /* Adresse mémoire du symbole */
+ STC_STRING, /* Désignation humaine */
+
+ STC_COUNT /* Nombre de colonnes */
+
+} StringsColumn;
+
+
+#define _(str) str
+
+
+/******************************************************************************
+* *
+* Paramètres : ref = adresse de l'espace de référencements. *
+* *
+* Description : Construit le panneau d'affichage des symboles. *
+* *
+* Retour : Adresse du panneau mis en place. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+GtkWidget *build_strings_panel(GObject *ref)
+{
+ GtkWidget *result; /* Pnneau à retourner */
+ GtkTreeStore *store; /* Modèle de gestion */
+ GtkWidget *treeview; /* Affichage de la liste */
+ GtkCellRenderer *renderer; /* Moteur de rendu de colonne */
+ GtkTreeViewColumn *column; /* Colonne de la liste */
+ GtkTreeSelection *select; /* Sélection dans la liste */
+
+ result = gtk_scrolled_window_new(NULL, NULL);
+ gtk_widget_show(result);
+
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(result), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(result), GTK_SHADOW_IN);
+
+ store = gtk_tree_store_new(STC_COUNT, G_TYPE_STRING, G_TYPE_STRING);
+ g_object_set_data(G_OBJECT(result), "store", store);
+
+ treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
+ gtk_widget_show(treeview);
+ gtk_container_add(GTK_CONTAINER(result), treeview);
+
+ g_object_unref(G_OBJECT(store));
+
+ column = gtk_tree_view_column_new();
+ gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
+ gtk_tree_view_set_expander_column(GTK_TREE_VIEW(treeview), column);
+
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes(_("Address"), renderer, "text", STC_ADDRESS, NULL);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
+
+ renderer = gtk_cell_renderer_text_new();
+ column = gtk_tree_view_column_new_with_attributes(_("String"), renderer, "text", STC_STRING, NULL);
+ gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
+
+
+ /*
+ select = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
+ gtk_tree_selection_set_mode(select, GTK_SELECTION_SINGLE);
+ g_signal_connect(G_OBJECT(select), "changed", G_CALLBACK(change_symbols_selection), ref);
+ */
+
+
+
+ return result;
+
+}
+
+
+
+/******************************************************************************
+* *
+* Paramètres : panel = panneau à mettre à jour. *
+* format = données sur l'exécutable à représenter. *
+* *
+* Description : Affiche la liste des symboles présents dans un exécutable. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void handle_new_exe_on_strings_panel(GtkWidget *panel, const exe_format *format)
+{
+ GtkTreeStore *store; /* Modèle de gestion */
+ GtkTreeIter iter; /* Point d'insertion */
+ char **labels; /* Etiquettes humaines */
+ ResolvedType *types; /* Type des symboles listés */
+ uint64_t *offsets; /* Emplacements de mémoire */
+ size_t count; /* Nombre des symboles */
+ size_t i; /* Boucle de parcours */
+ char address[11];
+
+ store = g_object_get_data(G_OBJECT(panel), "store");
+
+ count = get_exe_resolved_items(format, &labels, &types, &offsets);
+
+ if (count > 0)
+ {
+ for (i = 0; i < count; i++)
+ {
+ if (types[i] != RTP_STRING) continue;
+
+ snprintf(address, 11, "0x%08llx", offsets[i]);
+
+ gtk_tree_store_append(store, &iter, NULL);
+ gtk_tree_store_set(store, &iter,
+ STC_ADDRESS, address,
+ STC_STRING, labels[i],
+ -1);
+
+ }
+
+ free(labels);
+ free(types);
+ free(offsets);
+
+ }
+
+}
diff --git a/src/pan_strings.h b/src/pan_strings.h
new file mode 100644
index 0000000..01c2627
--- /dev/null
+++ b/src/pan_strings.h
@@ -0,0 +1,45 @@
+
+/* OpenIDA - Outil d'analyse de fichiers binaires
+ * pan_strings.h - prototypes pour le panneau d'affichage des chaînes de caractères
+ *
+ * Copyright (C) 2006-2007 Cyrille Bagard
+ *
+ * This file is part of OpenIDA.
+ *
+ * OpenIDA 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.
+ *
+ * OpenIDA 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
+#ifndef _PAN_STRINGS_H
+#define _PAN_STRINGS_H
+
+
+#include <gtk/gtk.h>
+
+
+#include "format/exe_format.h"
+
+
+
+/* Construit le panneau d'affichage des symboles. */
+GtkWidget *build_strings_panel(GObject *);
+
+
+/* Affiche la liste des symboles présents dans un exécutable. */
+void handle_new_exe_on_strings_panel(GtkWidget *, const exe_format *);
+
+
+
+#endif /* _PAN_STRINGS_H */
diff --git a/src/pan_symbols.c b/src/pan_symbols.c
index c2e7788..cef099e 100644
--- a/src/pan_symbols.c
+++ b/src/pan_symbols.c
@@ -1,6 +1,6 @@
-/* OpenIDA - Outils de configurations pour le WM Firebox
- * pan_symmbols.c - panneau d'affichage des symboles
+/* OpenIDA - Outil d'analyse de fichiers binaires
+ * pan_symbols.c - panneau d'affichage des symboles
*
* Copyright (C) 2006-2007 Cyrille Bagard
*
@@ -100,7 +100,6 @@ GtkWidget *build_symbols_panel(GObject *ref)
column = gtk_tree_view_column_new_with_attributes("Name", renderer, "text", SBC_NAME, NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
-
select = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
gtk_tree_selection_set_mode(select, GTK_SELECTION_SINGLE);
g_signal_connect(G_OBJECT(select), "changed", G_CALLBACK(change_symbols_selection), ref);
@@ -202,5 +201,3 @@ void handle_new_exe_on_symbols_panel(GtkWidget *panel, const exe_format *format)
}
-
-
diff --git a/src/pan_symbols.h b/src/pan_symbols.h
index 1fd1ee6..d294717 100644
--- a/src/pan_symbols.h
+++ b/src/pan_symbols.h
@@ -1,6 +1,6 @@
-/* OpenIDA - Outils de configurations pour le WM Firebox
- * pan_symmbols.h - prototypes pour le panneau d'affichage des symboles
+/* OpenIDA - Outil d'analyse de fichiers binaires
+ * pan_symbols.h - prototypes pour le panneau d'affichage des symboles
*
* Copyright (C) 2006-2007 Cyrille Bagard
*