diff options
Diffstat (limited to 'src/analysis/disass/loop.c')
-rw-r--r-- | src/analysis/disass/loop.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/analysis/disass/loop.c b/src/analysis/disass/loop.c index 44fa6d5..9a99bc4 100644 --- a/src/analysis/disass/loop.c +++ b/src/analysis/disass/loop.c @@ -227,6 +227,20 @@ static void track_loops_in_code(const GArchProcessor *proc, const mrange_t *rang if (g_arch_instruction_is_return(iter)) break; + /** + * Afin de détecter les boucles le plus en aval possible, + * on marque toutes les arrivées potentielles de boucles comme jalons. + * Ainsi la détection se réalise sur l'ultime saut qui boucle effectivement. + */ + if (g_arch_instruction_has_sources(iter)) + { + addr = get_mrange_addr(irange); + + if (is_new_exec_flow(flow, addr)) + add_step_into_exec_flow(flow, addr); + + } + /* Analyse des destinations */ dcount = g_arch_instruction_get_destinations(iter, &dests, &types, NULL); |