diff options
Diffstat (limited to 'src/analysis/disass/routines.c')
-rw-r--r-- | src/analysis/disass/routines.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/analysis/disass/routines.c b/src/analysis/disass/routines.c index 1150f08..5d6dc42 100644 --- a/src/analysis/disass/routines.c +++ b/src/analysis/disass/routines.c @@ -231,14 +231,16 @@ GRoutinesStudy *g_routines_study_new(GArchProcessor *proc, GBinPortion *portions static void g_routines_study_process(GRoutinesStudy *study, GtkStatusStack *status) { size_t i; /* Boucle de parcours */ - GBinRoutine *routine; /* Routine à traiter */ + GBinSymbol *symbol; /* Commodité d'accès */ + SymbolType type; /* Type de symbole rencontré */ for (i = study->begin; i < study->end; i++) { - routine = g_binary_symbol_get_routine(study->symbols[i]); + symbol = study->symbols[i]; + type = g_binary_symbol_get_target_type(symbol); - if (routine != NULL) - study->fallback(study, routine, i); + if (type == STP_ROUTINE || type == STP_ENTRY_POINT) + study->fallback(study, G_BIN_ROUTINE(symbol), i); gtk_status_stack_update_activity_value(status, study->id, 1); @@ -263,9 +265,12 @@ static void g_routines_study_process(GRoutinesStudy *study, GtkStatusStack *stat void g_routines_study_compute_limits(GRoutinesStudy *study, GBinRoutine *routine, size_t index) { + GBinSymbol *symbol; /* Version alternative */ const mrange_t *range; /* Zone du symbole suivant */ const vmpa2t *next; /* Début de la zone suivante */ + symbol = G_BIN_SYMBOL(routine); + if ((index + 1) < study->count) { range = g_binary_symbol_get_range(study->symbols[index + 1]); @@ -275,7 +280,7 @@ void g_routines_study_compute_limits(GRoutinesStudy *study, GBinRoutine *routine else next = NULL; - compute_routine_limit(routine, next, study->proc, study->portions); + compute_routine_limit(symbol, next, study->proc, study->portions); } @@ -296,6 +301,7 @@ void g_routines_study_compute_limits(GRoutinesStudy *study, GBinRoutine *routine void g_routines_study_handle_blocks(GRoutinesStudy *study, GBinRoutine *routine, size_t index) { + GBinSymbol *symbol; /* Version alternative */ const mrange_t *range; /* Couverture d'une routine */ const vmpa2t *start; /* Adresse de départ */ const instr_coverage *coverage; /* Instructions couvertes */ @@ -304,7 +310,9 @@ void g_routines_study_handle_blocks(GRoutinesStudy *study, GBinRoutine *routine, /* Préparatifs communs */ - range = g_binary_routine_get_range(routine); + symbol = G_BIN_SYMBOL(routine); + + range = g_binary_symbol_get_range(symbol); start = get_mrange_addr(range); coverage = g_arch_processor_find_coverage_by_address(study->proc, start); |