diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2015-04-04 13:31:33 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2015-04-04 13:31:33 (GMT) |
commit | 46e46c2894ea92502734c7bbd1cbcc6cb2e46d17 (patch) | |
tree | 9b338348d6bd78e71746bfb25fa8c864dfe44d1e /src/analysis/disass/limit.c | |
parent | d65fbe084a91d180d17767314f4e34b7456e8436 (diff) |
Updated the disassembling process order and defined ranks for basic routines.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@501 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
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) { |