summaryrefslogtreecommitdiff
path: root/src/analysis/disass/disassembler.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2018-08-08 19:59:34 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2018-08-08 19:59:34 (GMT)
commitb3b515ba37ef58751e5407bfcdff2dd67932b99a (patch)
tree88dabcde3d63e87e7ac0c7509629346dde066429 /src/analysis/disass/disassembler.c
parent0442cf03782e65bd680449cc213ace9a21bb081b (diff)
Defined a new kind of code blocks.
Diffstat (limited to 'src/analysis/disass/disassembler.c')
-rw-r--r--src/analysis/disass/disassembler.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/src/analysis/disass/disassembler.c b/src/analysis/disass/disassembler.c
index 6e71ed6..f229af3 100644
--- a/src/analysis/disass/disassembler.c
+++ b/src/analysis/disass/disassembler.c
@@ -52,7 +52,7 @@
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 *, GBinFormat *);
+static void process_all_routines(GLoadedBinary *, wgroup_id_t, GtkStatusStack *, const char *, rtn_fallback_cb);
/* Réalise un désassemblage effectif. */
static void compute_disassembly(GLoadedBinary *, GProcContext *, wgroup_id_t, GtkStatusStack *);
@@ -127,12 +127,11 @@ static void process_all_instructions(wgroup_id_t gid, GtkStatusStack *status, co
/******************************************************************************
* *
-* Paramètres : gid = groupe de travail impliqué. *
+* Paramètres : binary = binaire chargé comprenant les routines à traiter. *
+* gid = groupe de travail impliqué. *
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. *
-* format = accès aux données du binaire d'origine. *
* *
* Description : Opère sur toutes les routines. *
* *
@@ -142,8 +141,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, GBinFormat *format)
+static void process_all_routines(GLoadedBinary *binary, wgroup_id_t gid, GtkStatusStack *status, const char *msg, rtn_fallback_cb fallback)
{
+ GBinFormat *format; /* Format associé au binaire */
GBinPortion *portions; /* Couche première de portions */
size_t sym_count; /* Nombre de ces symboles */
guint runs_count; /* Qté d'exécutions parallèles */
@@ -155,6 +155,8 @@ 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 */
+ format = G_BIN_FORMAT(g_loaded_binary_get_format(binary));
+
portions = g_exe_format_get_portions(G_EXE_FORMAT(format));
g_binary_format_lock_symbols_rd(format);
@@ -178,8 +180,7 @@ static void process_all_routines(wgroup_id_t gid, GtkStatusStack *status, const
else
end = begin + run_size;
- study = g_routines_study_new(proc, format, portions,
- begin, end, id, fallback);
+ study = g_routines_study_new(binary, portions, begin, end, id, fallback);
g_work_queue_schedule_work(queue, G_DELAYED_WORK(study), gid);
@@ -193,6 +194,8 @@ static void process_all_routines(wgroup_id_t gid, GtkStatusStack *status, const
g_object_unref(G_OBJECT(portions));
+ g_object_unref(G_OBJECT(format));
+
}
@@ -293,9 +296,9 @@ static void compute_disassembly(GLoadedBinary *binary, GProcContext *context, wg
* Quatrième étape : établissement des couvertures de routines restantes.
*/
- process_all_routines(gid, status,
+ process_all_routines(binary, gid, status,
_("Finding remaining limits..."),
- g_routines_study_compute_limits, proc, G_BIN_FORMAT(format));
+ g_routines_study_compute_limits);
process_disassembly_event(PGA_DISASSEMBLY_LIMITED, binary, status, context);
@@ -317,9 +320,9 @@ static void compute_disassembly(GLoadedBinary *binary, GProcContext *context, wg
* Sixième étape : regroupement en blocs basiques.
*/
- process_all_routines(gid, status,
+ process_all_routines(binary, gid, status,
_("Control-flow analysis for routines..."),
- g_routines_study_handle_blocks, proc, G_BIN_FORMAT(format));
+ g_routines_study_handle_blocks);
process_disassembly_event(PGA_DISASSEMBLY_GROUPED, binary, status, context);