diff options
Diffstat (limited to 'src/format')
-rw-r--r-- | src/format/elf/elf.c | 15 | ||||
-rw-r--r-- | src/format/elf/section.c | 2 | ||||
-rw-r--r-- | src/format/part.c | 19 | ||||
-rw-r--r-- | src/format/part.h | 3 |
4 files changed, 38 insertions, 1 deletions
diff --git a/src/format/elf/elf.c b/src/format/elf/elf.c index 34c7521..f32bce7 100644 --- a/src/format/elf/elf.c +++ b/src/format/elf/elf.c @@ -407,14 +407,19 @@ static GBinPart **g_elf_format_get_parts(const GElfFormat *format, size_t *count { GBinPart **result; /* Tableau à retourner */ uint16_t i; /* Boucle de parcours */ + elf_shdr strings; /* Section des descriptions */ + bool has_strings; /* Section trouvée ? */ elf_shdr section; /* En-tête de section ELF */ GBinPart *part; /* Partie à intégrer à la liste*/ + const char *name; /* Nom trouvé ou NULL */ off_t offset; /* Début de part de programme */ elf_phdr phdr; /* En-tête de programme ELF */ result = NULL; *count = 0; + has_strings = find_elf_section_by_index(format, format->header.e_shstrndx, &strings); + /* Première tentative : les sections */ for (i = 0; i < format->header.e_shnum; i++) @@ -427,7 +432,15 @@ static GBinPart **g_elf_format_get_parts(const GElfFormat *format, size_t *count { part = g_binary_part_new(); - /* TODO : nom, droits/type */ + if (has_strings) + { + name = extract_name_from_elf_string_section(format, &strings, + ELF_SHDR(format, section, sh_name)); + + if (name != NULL) + g_binary_part_set_name(part, name); + + } g_binary_part_set_values(part, ELF_SHDR(format, section, sh_offset), diff --git a/src/format/elf/section.c b/src/format/elf/section.c index e019648..f837dbf 100644 --- a/src/format/elf/section.c +++ b/src/format/elf/section.c @@ -92,6 +92,8 @@ bool find_elf_section_by_name(const GElfFormat *format, const char *name, elf_sh secname = extract_name_from_elf_string_section(format, &strings, ELF_SHDR(format, *section, sh_name)); + /* FIXME : if secname == NULL */ + result = (strcmp(name, secname) == 0); } diff --git a/src/format/part.c b/src/format/part.c index 2096c6d..d21cd87 100644 --- a/src/format/part.c +++ b/src/format/part.c @@ -145,6 +145,25 @@ void g_binary_part_set_name(GBinPart *part, const char *name) /****************************************************************************** * * +* Paramètres : part = description de partie à mettre à jour. * +* * +* Description : Fournit la description attribuée à une partie de code. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +const char *g_binary_part_get_name(const GBinPart *part) +{ + return part->name; + +} + + +/****************************************************************************** +* * * Paramètres : part = description de partie à mettre à jour. * * offset = position de la section à conserver. * * size = taille de la section à conserver. * diff --git a/src/format/part.h b/src/format/part.h index aec324d..ff18fc9 100644 --- a/src/format/part.h +++ b/src/format/part.h @@ -57,6 +57,9 @@ GBinPart *g_binary_part_new(void); /* Attribue une description humaine à une partie de code. */ void g_binary_part_set_name(GBinPart *, const char *); +/* Fournit la description attribuée à une partie de code. */ +const char *g_binary_part_get_name(const GBinPart *); + /* Définit les valeurs utiles d'une partie de code. */ void g_binary_part_set_values(GBinPart *, off_t, off_t, vmpa_t); |