summaryrefslogtreecommitdiff
path: root/src/format
diff options
context:
space:
mode:
Diffstat (limited to 'src/format')
-rw-r--r--src/format/format.c94
-rw-r--r--src/format/format.h6
2 files changed, 48 insertions, 52 deletions
diff --git a/src/format/format.c b/src/format/format.c
index 4fec391..ff62b80 100644
--- a/src/format/format.c
+++ b/src/format/format.c
@@ -225,6 +225,51 @@ GBinSymbol **g_binary_format_get_symbols(const GBinFormat *format, size_t *count
/******************************************************************************
* *
+* 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. *
+* *
+* Retour : true si l'opération a été un succès, false sinon. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool g_binary_format_resolve_symbol(const GBinFormat *format, const vmpa2t *addr, GBinSymbol **symbol, phys_t *diff)
+{
+ bool result; /* Bilan à retourner */
+ size_t i; /* Boucle de parcours */
+ const mrange_t *range; /* Espace mémoire parcouru */
+
+ result = false;
+
+ for (i = 0; i < format->symbols_count && !result; i++)
+ {
+ range = g_binary_symbol_get_range(format->symbols[i]);
+
+ if (mrange_contains_addr(range, addr))
+ {
+ *symbol = format->symbols[i];
+ g_object_ref(G_OBJECT(*symbol));
+
+ *diff = compute_vmpa_diff(get_mrange_addr(range), addr);
+
+ result = true;
+
+ }
+
+ }
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : format = informations chargées à compléter. *
* routine = routine à ajouter à la liste. *
* *
@@ -351,55 +396,6 @@ void g_binary_format_decompile(const GBinFormat *format, GCodeBuffer *buffer, co
* *
* Paramètres : format = informations chargées à consulter. *
* label = étiquette du symbole si trouvé. [OUT] *
-* type = type du symbole trouvé. [OUT] *
-* address = adresse à cibler, puis décallage final. [OUT] *
-* *
-* Description : Recherche le symbole correspondant à une adresse. *
-* *
-* Retour : true si l'opération a été un succès, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool g_binary_format_resolve_symbol(const GBinFormat *format, const char **label, SymbolType *type, vmpa_t *address)
-{
- bool result; /* Bilan à retourner */
- size_t i; /* Boucle de parcours */
- vmpa_t addr; /* Adresse de symbole */
- off_t size; /* Taille du symole */
-
- result = false;
-
- for (i = 0; i < format->symbols_count && !result; i++)
- {
- addr = g_binary_symbol_get_address(format->symbols[i]);
- size = 0;//////g_binary_symbol_get_size(format->symbols[i]);
-
- if (addr <= *address && *address < (addr + size))
- {
- *label = g_binary_symbol_to_string(format->symbols[i]);
- *type = g_binary_symbol_get_target_type(format->symbols[i]);
- *address -= addr;
-
- if (*type == STP_STRING)
- *label += *address;
-
- result = true;
-
- }
-
- }
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = informations chargées à consulter. *
-* label = étiquette du symbole si trouvé. [OUT] *
* address = adresse à cibler, puis décallage final. [OUT] *
* *
* Description : Recherche une position dans une routine selon une adresse. *
diff --git a/src/format/format.h b/src/format/format.h
index 2eed669..3c74b50 100644
--- a/src/format/format.h
+++ b/src/format/format.h
@@ -64,6 +64,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 adresse. */
+bool g_binary_format_resolve_symbol(const GBinFormat *, const vmpa2t *, GBinSymbol **, phys_t *);
+
/* Ajoute une routine à la collection du format binaire. */
void g_binary_format_add_routine(GBinFormat *, GBinRoutine *) __attribute__ ((deprecated));
@@ -76,9 +79,6 @@ const char * const *g_binary_format_get_source_files(const GBinFormat *, size_t
/* Procède à la décompilation complète du format. */
void g_binary_format_decompile(const GBinFormat *, GCodeBuffer *, const char *filename);
-/* Recherche le symbole correspondant à une adresse. */
-bool g_binary_format_resolve_symbol(const GBinFormat *, const char **, SymbolType *, vmpa_t *);
-
/* Recherche une position dans une routine selon une adresse. */
bool g_binary_format_resolve_relative_routine(const GBinFormat *, const char **, vmpa_t *);