diff options
Diffstat (limited to 'src/analysis/disass')
-rw-r--r-- | src/analysis/disass/fetch.c | 27 | ||||
-rw-r--r-- | src/analysis/disass/output.c | 2 |
2 files changed, 20 insertions, 9 deletions
diff --git a/src/analysis/disass/fetch.c b/src/analysis/disass/fetch.c index 20128aa..55ea1d4 100644 --- a/src/analysis/disass/fetch.c +++ b/src/analysis/disass/fetch.c @@ -135,22 +135,26 @@ GArchInstruction *disassemble_binary_content(const GLoadedBinary *binary, GtkExt + vmpa2t *last; /* Dernière bordure rencontrée */ + + + GBinSymbol **symbols; /* Symboles à représenter */ size_t sym_count; /* Qté de symboles présents */ size_t i; /* Boucle de parcours */ - GArchInstruction *instr; /* Instruction à insérer */ - - - vmpa2t *last; /* Dernière bordure rencontrée */ const vmpa2t *border; /* Nouvelle bordure rencontrée */ off_t length; /* Taille d'une partie traitée */ + GArchInstruction *instr; /* Instruction à insérer */ + + + GArchInstruction *joint; /* Jointure entre deux lots */ @@ -179,19 +183,26 @@ GArchInstruction *disassemble_binary_content(const GLoadedBinary *binary, GtkExt + border = g_binary_symbol_get_location(symbols[i], &length); switch (g_binary_symbol_get_target_type(symbols[i])) { case STP_DATA: instr = g_binary_symbol_get_instruction(symbols[i]); g_object_ref(G_OBJECT(instr)); - border = g_arch_instruction_get_location2(instr, &length); - - // Utiliser : ??? - // const vmpa2t *g_binary_symbol_get_address2(const GBinSymbol *symbol) + break; + case STP_ROUTINE: + instr = load_raw_binary(binary, border, + get_phy_addr(border) + length, + statusbar, id); break; + default: + printf("BADDD !\n"); + exit(0); + break; + } /* Traiter la diff */ diff --git a/src/analysis/disass/output.c b/src/analysis/disass/output.c index 927088f..f368796 100644 --- a/src/analysis/disass/output.c +++ b/src/analysis/disass/output.c @@ -130,7 +130,7 @@ void print_disassembled_instructions(GCodeBuffer *buffer, const GExeFormat *form if (sym_index < sym_count) { iaddr = g_arch_instruction_get_location2(iter, NULL); - saddr = g_binary_symbol_get_address2(symbols[sym_index]); + saddr = g_binary_symbol_get_location(symbols[sym_index], NULL); if (cmp_vmpa_by_phy(iaddr, saddr) == 0) { |