summaryrefslogtreecommitdiff
path: root/src/analysis/disass/limit.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2015-04-04 13:31:33 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2015-04-04 13:31:33 (GMT)
commit46e46c2894ea92502734c7bbd1cbcc6cb2e46d17 (patch)
tree9b338348d6bd78e71746bfb25fa8c864dfe44d1e /src/analysis/disass/limit.c
parentd65fbe084a91d180d17767314f4e34b7456e8436 (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.c12
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)
{