diff options
Diffstat (limited to 'src/analysis/disass/limit.c')
-rw-r--r-- | src/analysis/disass/limit.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/analysis/disass/limit.c b/src/analysis/disass/limit.c index 3810978..6705e1d 100644 --- a/src/analysis/disass/limit.c +++ b/src/analysis/disass/limit.c @@ -64,7 +64,8 @@ static const mrange_t *find_x_range_for_addr(const mrange_t *ranges, size_t coun /****************************************************************************** * * -* Paramètres : list = ensemble d'instructions désassemblées. * +* Paramètres : format = format du binaire concerné par la procédure. * +* proc = ensemble d'instructions désassemblées. * * routines = prototypes existants à insérer. * * count = quantité de ces prototypes. * * statusbar = barre de statut avec progression à mettre à jour.* @@ -78,13 +79,14 @@ static const mrange_t *find_x_range_for_addr(const mrange_t *ranges, size_t coun * * ******************************************************************************/ -void limit_all_routines(GExeFormat *format, GBinRoutine **routines, size_t count, GtkExtStatusBar *statusbar, bstatus_id_t id) +void limit_all_routines(GExeFormat *format, const GArchProcessor *proc, GBinRoutine **routines, size_t count, GtkExtStatusBar *statusbar, bstatus_id_t id) { mrange_t *exe_ranges; /* Liste de zones exécutables */ size_t exe_count; /* Nombre de ces zones */ size_t i; /* Boucle de parcours */ const mrange_t *range; /* Emplacement courant */ vmpa2t addr; /* Adresse à conserver */ + GArchInstruction *start; /* Première instruction */ phys_t diff; /* Taille définie par déduction*/ mrange_t new; /* Nouvel emplacement taillé */ @@ -99,6 +101,12 @@ void limit_all_routines(GExeFormat *format, GBinRoutine **routines, size_t count copy_vmpa(&addr, get_mrange_addr(range)); + /* Marquage de la première instruction */ + + start = g_arch_processor_find_instr_by_address(proc, &addr); + + g_arch_instruction_set_flag(start, AIF_ROUTINE_START); + /* Si on peut se raccrocher à la routine suivante... */ if ((i + 1) < count) { |