diff options
Diffstat (limited to 'src/format')
-rw-r--r-- | src/format/format.c | 44 | ||||
-rw-r--r-- | src/format/format.h | 3 | ||||
-rw-r--r-- | src/format/symbol.c | 1 |
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; |