summaryrefslogtreecommitdiff
path: root/src/format
diff options
context:
space:
mode:
Diffstat (limited to 'src/format')
-rw-r--r--src/format/format.c46
-rw-r--r--src/format/format.h3
2 files changed, 49 insertions, 0 deletions
diff --git a/src/format/format.c b/src/format/format.c
index 2256160..c1877d2 100644
--- a/src/format/format.c
+++ b/src/format/format.c
@@ -482,6 +482,8 @@ bool g_binary_format_find_symbol_at(const GBinFormat *format, const vmpa2t *addr
result = false;
+ *symbol = NULL; /* TODO : vérifier les doublons côtés appelants */
+
for (i = 0; i < format->symbols_count && !result; i++)
{
range = g_binary_symbol_get_range(format->symbols[i]);
@@ -507,6 +509,50 @@ bool g_binary_format_find_symbol_at(const GBinFormat *format, const vmpa2t *addr
* Paramètres : format = informations chargées à consulter. *
* addr = adresse à cibler lors des recherches. *
* symbol = éventuel symbole trouvé à déréfenrencer. [OUT] *
+* *
+* Description : Recherche le symbole suivant celui lié à une adresse. *
+* *
+* Retour : true si l'opération a été un succès, false sinon. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool g_binary_format_find_next_symbol_at(const GBinFormat *format, const vmpa2t *addr, GBinSymbol **symbol)
+{
+ bool result; /* Bilan à retourner */
+ size_t i; /* Boucle de parcours */
+ const mrange_t *range; /* Espace mémoire parcouru */
+
+ result = false;
+
+ *symbol = NULL;
+
+ for (i = 0; i < format->symbols_count && !result; i++)
+ {
+ range = g_binary_symbol_get_range(format->symbols[i]);
+
+ if (cmp_vmpa(get_mrange_addr(range), addr) == 0 && (i + 1) < format->symbols_count)
+ {
+ *symbol = format->symbols[i + 1];
+ 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 = décallage entre l'adresse et le symbole. [OUT] *
* *
* Description : Recherche le symbole correspondant à une adresse. *
diff --git a/src/format/format.h b/src/format/format.h
index 66f014b..807e328 100644
--- a/src/format/format.h
+++ b/src/format/format.h
@@ -82,6 +82,9 @@ bool g_binary_format_find_symbol_by_label(const GBinFormat *, const char *, GBin
/* Recherche le symbole correspondant à une adresse. */
bool g_binary_format_find_symbol_at(const GBinFormat *, const vmpa2t *, GBinSymbol **);
+/* Recherche le symbole suivant celui lié à une adresse. */
+bool g_binary_format_find_next_symbol_at(const GBinFormat *, const vmpa2t *, GBinSymbol **);
+
/* Recherche le symbole correspondant à une adresse. */
bool g_binary_format_resolve_symbol(const GBinFormat *, const vmpa2t *, GBinSymbol **, phys_t *);