diff options
Diffstat (limited to 'src/analysis/disass/disassembler.c')
-rw-r--r-- | src/analysis/disass/disassembler.c | 44 |
1 files changed, 30 insertions, 14 deletions
diff --git a/src/analysis/disass/disassembler.c b/src/analysis/disass/disassembler.c index 2cfa6a5..364348a 100644 --- a/src/analysis/disass/disassembler.c +++ b/src/analysis/disass/disassembler.c @@ -79,7 +79,7 @@ static void g_delayed_disassembly_init(GDelayedDisassembly *); static GDelayedDisassembly *g_delayed_disassembly_new(GLoadedBinary *, GArchInstruction **, GCodeBuffer *); /* Opère sur toutes les instructions. */ -static void process_all_instructions(wgroup_id_t, GtkStatusStack *, const char *, ins_fallback_cb, GArchProcessor *, GExeFormat *); +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 *); @@ -182,10 +182,11 @@ static GDelayedDisassembly *g_delayed_disassembly_new(GLoadedBinary *binary, GAr /****************************************************************************** * * * Paramètres : gid = groupe de travail impliqué. * - status = barre de statut à tenir informée. * +* status = barre de statut à tenir informée. * * msg = message à faire paraître pour la patience. * * fallback = routine de traitements particuliers. * * proc = ensemble d'instructions désassemblées. * +* ctx = contexte fourni pour suivre le désassemblage. * * format = accès aux données du binaire d'origine. * * * * Description : Opère sur toutes les instructions. * @@ -196,7 +197,7 @@ static GDelayedDisassembly *g_delayed_disassembly_new(GLoadedBinary *binary, GAr * * ******************************************************************************/ -static void process_all_instructions(wgroup_id_t gid, GtkStatusStack *status, const char *msg, ins_fallback_cb fallback, GArchProcessor *proc, GExeFormat *format) +static void process_all_instructions(wgroup_id_t gid, GtkStatusStack *status, const char *msg, ins_fallback_cb fallback, GArchProcessor *proc, GProcContext *ctx, GExeFormat *format) { guint runs_count; /* Qté d'exécutions parallèles */ size_t ins_count; /* Quantité d'instructions */ @@ -227,7 +228,7 @@ static void process_all_instructions(wgroup_id_t gid, GtkStatusStack *status, co else end = begin + run_size; - study = g_instructions_study_new(proc, G_BIN_FORMAT(format), begin, end, id, fallback); + study = g_instructions_study_new(proc, ctx, G_BIN_FORMAT(format), begin, end, id, fallback); g_work_queue_schedule_work(queue, G_DELAYED_WORK(study), gid); @@ -329,24 +330,26 @@ static void g_delayed_disassembly_process(GDelayedDisassembly *disass, GtkStatus //GBinFormat *format; /* Format du fichier binaire */ GArchProcessor *proc; /* Architecture du binaire */ - + GProcContext *ctx; /* Contexte de suivi dédié */ //size_t i; /* Boucle de parcours */ + _curbin = disass->binary; + //format = G_BIN_FORMAT(g_loaded_binary_get_format(binary)); + proc = g_loaded_binary_get_processor(disass->binary); + ctx = g_arch_processor_get_context(proc); - gid = g_work_queue_define_work_group(get_work_queue()); + gid = g_work_queue_define_work_group(get_work_queue()); - //format = G_BIN_FORMAT(g_loaded_binary_get_format(binary)); - proc = g_loaded_binary_get_processor(disass->binary); @@ -361,7 +364,7 @@ static void g_delayed_disassembly_process(GDelayedDisassembly *disass, GtkStatus - *disass->instrs = disassemble_binary_content(disass->binary, gid, status); + *disass->instrs = disassemble_binary_content(disass->binary, ctx, gid, status); g_arch_processor_set_disassembled_instructions(proc, *disass->instrs); @@ -374,7 +377,7 @@ static void g_delayed_disassembly_process(GDelayedDisassembly *disass, GtkStatus process_all_instructions(gid, status, _("Calling 'link' hook on all instructions..."), g_instructions_study_do_link_operation, - proc, disass->format); + proc, ctx, disass->format); // plugins ////////////////////////// @@ -390,7 +393,7 @@ static void g_delayed_disassembly_process(GDelayedDisassembly *disass, GtkStatus process_all_instructions(gid, status, _("Calling 'post' hook on all instructions..."), g_instructions_study_do_post_operation, - proc, disass->format); + proc, ctx, disass->format); @@ -426,7 +429,7 @@ static void g_delayed_disassembly_process(GDelayedDisassembly *disass, GtkStatus process_all_instructions(gid, status, _("Establishing links betweek all instructions..."), g_instructions_study_establish_links, - proc, disass->format); + proc, ctx, disass->format); @@ -515,16 +518,29 @@ static void g_delayed_disassembly_process(GDelayedDisassembly *disass, GtkStatus - proc = g_loaded_binary_get_processor(disass->binary); print_disassembled_instructions(disass->buffer, disass->format, proc, status); - g_object_unref(G_OBJECT(proc)); + /* Rajout de tous les éléments mis en place automatiquement */ + + void add_to_collection(GDbItem *item, GLoadedBinary *binary) + { + g_object_ref(G_OBJECT(item)); + g_loaded_binary_add_to_collection(binary, item); + + } + g_proc_context_foreach_db_item(ctx, (GFunc)add_to_collection, disass->binary); + + /* Nettoyage final et sortie ! */ + + g_object_unref(G_OBJECT(ctx)); + + g_object_unref(G_OBJECT(proc)); process_disassembly_event(PGA_DISASSEMBLY_ENDED, disass->binary); |