diff options
Diffstat (limited to 'src/analysis/disass/disassembler.c')
-rw-r--r-- | src/analysis/disass/disassembler.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/analysis/disass/disassembler.c b/src/analysis/disass/disassembler.c index bb69c0e..ae60602 100644 --- a/src/analysis/disass/disassembler.c +++ b/src/analysis/disass/disassembler.c @@ -92,7 +92,7 @@ static GDelayedDisassembly *g_delayed_disassembly_new(GLoadedBinary *, GBufferCa static void process_all_instructions(wgroup_id_t, GtkStatusStack *, const char *, ins_fallback_cb, GArchProcessor *, GProcContext *, GExeFormat *); /* Opère sur toutes les routines. */ -static void process_all_routines(wgroup_id_t, GtkStatusStack *, const char *, rtn_fallback_cb, GArchProcessor *, GExeFormat *); +static void process_all_routines(wgroup_id_t, GtkStatusStack *, const char *, rtn_fallback_cb, GArchProcessor *, GBinFormat *); /* Assure le désassemblage en différé. */ static void g_delayed_disassembly_process(GDelayedDisassembly *, GtkStatusStack *); @@ -318,10 +318,9 @@ static void process_all_instructions(wgroup_id_t gid, GtkStatusStack *status, co * * ******************************************************************************/ -static void process_all_routines(wgroup_id_t gid, GtkStatusStack *status, const char *msg, rtn_fallback_cb fallback, GArchProcessor *proc, GExeFormat *format) +static void process_all_routines(wgroup_id_t gid, GtkStatusStack *status, const char *msg, rtn_fallback_cb fallback, GArchProcessor *proc, GBinFormat *format) { GBinPortion *portions; /* Couche première de portions */ - GBinSymbol **symbols; /* Liste des symboles trouvés */ size_t sym_count; /* Nombre de ces symboles */ guint runs_count; /* Qté d'exécutions parallèles */ size_t run_size; /* Volume réparti par exécution*/ @@ -332,9 +331,11 @@ static void process_all_routines(wgroup_id_t gid, GtkStatusStack *status, const size_t end; /* Fin d'un bloc de traitement */ GRoutinesStudy *study; /* Tâche d'étude à programmer */ - portions = g_exe_format_get_portions(format); + portions = g_exe_format_get_portions(G_EXE_FORMAT(format)); - symbols = g_binary_format_get_symbols(G_BIN_FORMAT(format), &sym_count); + g_binary_format_lock_symbols_rd(format); + + sym_count = g_binary_format_count_symbols(format); runs_count = g_get_num_processors(); @@ -353,7 +354,7 @@ static void process_all_routines(wgroup_id_t gid, GtkStatusStack *status, const else end = begin + run_size; - study = g_routines_study_new(proc, portions, symbols, sym_count, + study = g_routines_study_new(proc, format, portions, begin, end, id, fallback); g_work_queue_schedule_work(queue, G_DELAYED_WORK(study), gid); @@ -364,6 +365,8 @@ static void process_all_routines(wgroup_id_t gid, GtkStatusStack *status, const gtk_status_stack_remove_activity(status, id); + g_binary_format_unlock_symbols_rd(format); + g_object_unref(G_OBJECT(portions)); } @@ -471,7 +474,7 @@ static void g_delayed_disassembly_process(GDelayedDisassembly *disass, GtkStatus process_all_routines(gid, status, _("Finding remaining limits..."), - g_routines_study_compute_limits, proc, disass->format); + g_routines_study_compute_limits, proc, G_BIN_FORMAT(disass->format)); @@ -525,7 +528,7 @@ static void g_delayed_disassembly_process(GDelayedDisassembly *disass, GtkStatus #if 1 process_all_routines(gid, status, _("Control-flow analysis for routines..."), - g_routines_study_handle_blocks, proc, disass->format); + g_routines_study_handle_blocks, proc, G_BIN_FORMAT(disass->format)); #endif |