summaryrefslogtreecommitdiff
path: root/src/format
diff options
context:
space:
mode:
Diffstat (limited to 'src/format')
-rw-r--r--src/format/format.c44
-rw-r--r--src/format/format.h3
-rw-r--r--src/format/symbol.c1
3 files changed, 48 insertions, 0 deletions
diff --git a/src/format/format.c b/src/format/format.c
index 29c151d..6b63556 100644
--- a/src/format/format.c
+++ b/src/format/format.c
@@ -25,6 +25,7 @@
#include <malloc.h>
+#include <string.h>
#include "format-int.h"
@@ -223,6 +224,49 @@ GBinSymbol **g_binary_format_get_symbols(const GBinFormat *format, size_t *count
/******************************************************************************
* *
* Paramètres : format = informations chargées à consulter. *
+* label = étiquette à retrouver lors des recherches. *
+* symbol = éventuel symbole trouvé à déréfenrencer. [OUT] *
+* *
+* Description : Recherche le symbole correspondant à une étiquette. *
+* *
+* Retour : true si l'opération a été un succès, false sinon. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool g_binary_format_find_symbol_by_label(const GBinFormat *format, const char *label, GBinSymbol **symbol)
+{
+ bool result; /* Bilan à retourner */
+ size_t i; /* Boucle de parcours */
+ const char *cur_lbl; /* Etiquette courante */
+
+ result = false;
+
+ for (i = 0; i < format->symbols_count && !result; i++)
+ {
+ cur_lbl = g_binary_symbol_get_label(format->symbols[i]);
+ if (cur_lbl == NULL) continue;
+
+ if (strcmp(label, cur_lbl) == 0)
+ {
+ *symbol = format->symbols[i];
+ g_object_ref(G_OBJECT(*symbol));
+
+ result = true;
+
+ }
+
+ }
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : format = informations chargées à consulter. *
* addr = adresse à cibler lors des recherches. *
* symbol = éventuel symbole trouvé à déréfenrencer. [OUT] *
* *
diff --git a/src/format/format.h b/src/format/format.h
index ebad980..e23b4bd 100644
--- a/src/format/format.h
+++ b/src/format/format.h
@@ -70,6 +70,9 @@ void g_binary_format_add_symbol(GBinFormat *, GBinSymbol *);
/* Fournit la liste de tous les symboles détectés. */
GBinSymbol **g_binary_format_get_symbols(const GBinFormat *, size_t *);
+/* Recherche le symbole correspondant à une étiquette. */
+bool g_binary_format_find_symbol_by_label(const GBinFormat *, const char *, GBinSymbol **);
+
/* Recherche le symbole correspondant à une adresse. */
bool g_binary_format_find_symbol_at(const GBinFormat *, const vmpa2t *, GBinSymbol **);
diff --git a/src/format/symbol.c b/src/format/symbol.c
index ce5c837..7817d5f 100644
--- a/src/format/symbol.c
+++ b/src/format/symbol.c
@@ -379,6 +379,7 @@ const mrange_t *g_binary_symbol_get_range(const GBinSymbol *symbol)
break;
default:
+ /* FIXME : assert(0); */
result = NULL;
break;