summaryrefslogtreecommitdiff
path: root/src/format/elf/e_elf.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/format/elf/e_elf.c')
-rw-r--r--src/format/elf/e_elf.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/format/elf/e_elf.c b/src/format/elf/e_elf.c
index a6399ab..0493df8 100644
--- a/src/format/elf/e_elf.c
+++ b/src/format/elf/e_elf.c
@@ -59,6 +59,7 @@ elf_format *load_elf(const uint8_t *content, off_t length)
EXE_FORMAT(result)->length = length;
EXE_FORMAT(result)->find_section = (find_section_fc)find_elf_section;
+ EXE_FORMAT(result)->get_symbols = (get_symbols_fc)get_elf_symbols;
memcpy(&result->header, content, sizeof(Elf32_Ehdr));
@@ -75,3 +76,41 @@ elf_format *load_elf(const uint8_t *content, off_t length)
return result;
}
+
+
+/******************************************************************************
+* *
+* 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 symboles présents dans le contenu binaire. *
+* *
+* Retour : Nombre d'éléments mis en place. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+size_t get_elf_symbols(const elf_format *format, char ***labels, SymbolType **types, uint64_t **offsets)
+{
+ size_t result; /* Quantité à retourner */
+ size_t i; /* Boucle de parcours */
+
+ result = format->sym_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] = STP_SECTION;
+ (*offsets)[i] = format->symbols[i].address;
+ }
+
+ return result;
+
+}