diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2017-05-16 21:56:55 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2017-05-16 21:56:55 (GMT) |
commit | 4691a434a34a19317156a761967f719e408b73bb (patch) | |
tree | 1daaf5be5d4a9f52d492380c2862580129d2ad12 /plugins/readelf | |
parent | 1996274a43883aa58e8c565f7698bc7c338a9ce0 (diff) |
Merged routines into symbols.
Diffstat (limited to 'plugins/readelf')
-rw-r--r-- | plugins/readelf/strtab.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/plugins/readelf/strtab.c b/plugins/readelf/strtab.c index f8ab2c7..1564674 100644 --- a/plugins/readelf/strtab.c +++ b/plugins/readelf/strtab.c @@ -59,9 +59,11 @@ static void parse_elf_string_table(GElfFormat *format, GPreloadInfo *info, const vmpa2t pos; /* Tête de lecture */ const bin_t *data; /* Donnés à parcourir */ bool cut; /* Séparation nette ? */ + GBinFormat *base; /* Autre version du format */ phys_t i; /* Boucle de parcours */ phys_t end; /* Position de fin de chaîne */ GArchInstruction *instr; /* Instruction décodée */ + const mrange_t *irange; /* Espace occupé par une chaîne*/ GBinSymbol *symbol; /* Symbole à intégrer */ char *label; /* Désignation de la chaîne */ @@ -76,12 +78,12 @@ static void parse_elf_string_table(GElfFormat *format, GPreloadInfo *info, const */ if (data == NULL) return; - cut = true; - /* Boucle de parcours */ cut = true; + base = G_BIN_FORMAT(format); + for (i = 0; i < length; i++) if (isprint(data[i])) { @@ -103,8 +105,10 @@ static void parse_elf_string_table(GElfFormat *format, GPreloadInfo *info, const g_preload_info_add_instruction(info, instr); - g_object_ref(G_OBJECT(instr)); - ADD_STR_AS_SYM(format, symbol, instr); + irange = g_arch_instruction_get_range(instr); + + symbol = g_binary_symbol_new(irange, STP_RO_STRING); + g_binary_format_add_symbol(base, symbol); /* Jointure avec la chaîne précédente ? */ @@ -113,7 +117,7 @@ static void parse_elf_string_table(GElfFormat *format, GPreloadInfo *info, const copy_vmpa(&pos, get_mrange_addr(range)); advance_vmpa(&pos, i); - label = create_string_label(G_BIN_FORMAT(format), &pos, end - i); + label = create_string_label(base, get_mrange_addr(irange), end - i); g_binary_symbol_set_alt_label(symbol, label); |