diff options
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/fmtp/parser.c | 11 | ||||
-rw-r--r-- | plugins/readdex/ids.c | 12 | ||||
-rw-r--r-- | plugins/readelf/strtab.c | 29 |
3 files changed, 33 insertions, 19 deletions
diff --git a/plugins/fmtp/parser.c b/plugins/fmtp/parser.c index 96aeb11..fe41e9b 100644 --- a/plugins/fmtp/parser.c +++ b/plugins/fmtp/parser.c @@ -55,10 +55,10 @@ static bool parse_field_definition(const fmt_field_def *, GBinFormat *, GPreload static bool parse_field_definition(const fmt_field_def *def, GBinFormat *format, GPreloadInfo *info, vmpa2t *pos, void *data) { + bool result; /* Bilan à retourner */ GBinContent *content; /* Contenu binaire à lire */ SourceEndian endian; /* Boutisme utilisé */ vmpa2t mod; /* Position modifiable */ - bool result; /* Bilan à retourner */ GArchInstruction *instr; /* Instruction décodée */ GImmOperand *imm; /* Opérande à transformer */ size_t i; /* Boucle de parcours */ @@ -66,6 +66,7 @@ static bool parse_field_definition(const fmt_field_def *def, GBinFormat *format, GDbComment *comment; /* Définition de commentaire */ uint64_t raw; /* Valeur brute à étudier */ const comment_part *part; /* Accès plus direct */ + bool inserted; /* Bilan d'une insertion */ /* Lecture */ @@ -192,9 +193,13 @@ static bool parse_field_definition(const fmt_field_def *def, GBinFormat *format, /* Insertions */ - g_preload_info_add_instruction(info, instr); + inserted = g_preload_info_add_instruction(info, instr); - g_preload_info_add_comment(info, comment); + if (inserted) + g_preload_info_add_comment(info, comment); + + else + g_object_unref(G_OBJECT(comment)); pfd_exit: diff --git a/plugins/readdex/ids.c b/plugins/readdex/ids.c index e09036e..518e9ad 100644 --- a/plugins/readdex/ids.c +++ b/plugins/readdex/ids.c @@ -254,6 +254,7 @@ bool annotate_dex_string_ids(const GDexFormat *format, GPreloadInfo *info, GtkSt vmpa2t item_pos; /* Position d'un élément */ uleb128_t length; /* Taille de la chaîne en cours*/ GArchInstruction *instr; /* Instruction décodée */ + bool inserted; /* Bilan d'une insertion */ const mrange_t *range; /* Espace occupé par une chaîne*/ GBinSymbol *symbol; /* Symbole à intégrer */ @@ -331,13 +332,16 @@ bool annotate_dex_string_ids(const GDexFormat *format, GPreloadInfo *info, GtkSt g_raw_instruction_mark_as_string(G_RAW_INSTRUCTION(instr), true); - g_preload_info_add_instruction(info, instr); + inserted = g_preload_info_add_instruction(info, instr); - range = g_arch_instruction_get_range(instr); + if (inserted) + { + range = g_arch_instruction_get_range(instr); - symbol = g_binary_symbol_new(range, STP_RO_STRING); - g_binary_format_add_symbol(bformat, symbol); + symbol = g_binary_symbol_new(range, STP_RO_STRING); + g_binary_format_add_symbol(bformat, symbol); + } } diff --git a/plugins/readelf/strtab.c b/plugins/readelf/strtab.c index 1564674..7cdb4c9 100644 --- a/plugins/readelf/strtab.c +++ b/plugins/readelf/strtab.c @@ -63,6 +63,7 @@ static void parse_elf_string_table(GElfFormat *format, GPreloadInfo *info, const phys_t i; /* Boucle de parcours */ phys_t end; /* Position de fin de chaîne */ GArchInstruction *instr; /* Instruction décodée */ + bool inserted; /* Bilan d'une insertion */ const mrange_t *irange; /* Espace occupé par une chaîne*/ GBinSymbol *symbol; /* Symbole à intégrer */ char *label; /* Désignation de la chaîne */ @@ -103,25 +104,29 @@ static void parse_elf_string_table(GElfFormat *format, GPreloadInfo *info, const g_raw_instruction_mark_as_string(G_RAW_INSTRUCTION(instr), true); - g_preload_info_add_instruction(info, instr); + inserted = g_preload_info_add_instruction(info, instr); - irange = g_arch_instruction_get_range(instr); + if (inserted) + { + irange = g_arch_instruction_get_range(instr); - symbol = g_binary_symbol_new(irange, STP_RO_STRING); - g_binary_format_add_symbol(base, symbol); + symbol = g_binary_symbol_new(irange, STP_RO_STRING); + g_binary_format_add_symbol(base, symbol); - /* Jointure avec la chaîne précédente ? */ + /* Jointure avec la chaîne précédente ? */ - if (cut) - { - copy_vmpa(&pos, get_mrange_addr(range)); - advance_vmpa(&pos, i); + if (cut) + { + copy_vmpa(&pos, get_mrange_addr(range)); + advance_vmpa(&pos, i); + + label = create_string_label(base, get_mrange_addr(irange), end - i); - label = create_string_label(base, get_mrange_addr(irange), end - i); + g_binary_symbol_set_alt_label(symbol, label); - g_binary_symbol_set_alt_label(symbol, label); + free(label); - free(label); + } } |