From 1f7e9506775f66a3a5f2859779d33b914eee8ef4 Mon Sep 17 00:00:00 2001
From: Cyrille Bagard <nocbos@gmail.com>
Date: Sun, 17 Jun 2018 15:17:54 +0200
Subject: Extended the environment provided with the plugins API.

---
 plugins/devdbg/speed.c             | 10 ++++++----
 plugins/devdbg/speed.h             |  2 +-
 plugins/libcsem/semantic.c         | 10 ++++++----
 plugins/libcsem/semantic.h         |  2 +-
 plugins/pychrysalide/plugin.c      | 16 ++++++++++------
 src/analysis/disass/disassembler.c | 16 ++++++++--------
 src/plugins/pglist.h               |  4 ++--
 src/plugins/plugin-int.h           |  2 +-
 src/plugins/plugin.c               |  6 ++++--
 src/plugins/plugin.h               |  2 +-
 10 files changed, 40 insertions(+), 30 deletions(-)

diff --git a/plugins/devdbg/speed.c b/plugins/devdbg/speed.c
index f967e43..f9fccfe 100644
--- a/plugins/devdbg/speed.c
+++ b/plugins/devdbg/speed.c
@@ -50,9 +50,11 @@ typedef struct _speed_measure
 
 /******************************************************************************
 *                                                                             *
-*  Paramètres  : plugin = greffon à manipuler.                                *
-*                action = type d'action attendue.                             *
-*                binary = binaire dont le contenu est en cours de traitement. *
+*  Paramètres  : plugin  = greffon à manipuler.                               *
+*                action  = type d'action attendue.                            *
+*                binary  = binaire dont le contenu est en cours de traitement.*
+*                status  = barre de statut à tenir informée.                  *
+*                context = contexte de désassemblage.                         *
 *                                                                             *
 *  Description : Exécute une action pendant un désassemblage de binaire.      *
 *                                                                             *
@@ -62,7 +64,7 @@ typedef struct _speed_measure
 *                                                                             *
 ******************************************************************************/
 
-G_MODULE_EXPORT void process_binary_disassembly(const GPluginModule *plugin, PluginAction action, GLoadedBinary *binary)
+G_MODULE_EXPORT void process_binary_disassembly(const GPluginModule *plugin, PluginAction action, GLoadedBinary *binary, GtkStatusStack *status, GProcContext *context)
 {
     speed_measure *measure;                 /* Suivi des progressions      */
 
diff --git a/plugins/devdbg/speed.h b/plugins/devdbg/speed.h
index 129f373..4367570 100644
--- a/plugins/devdbg/speed.h
+++ b/plugins/devdbg/speed.h
@@ -31,7 +31,7 @@
 
 
 /* Exécute une action pendant un désassemblage de binaire. */
-G_MODULE_EXPORT void process_binary_disassembly(const GPluginModule *, PluginAction , GLoadedBinary *);
+G_MODULE_EXPORT void process_binary_disassembly(const GPluginModule *, PluginAction , GLoadedBinary *, GtkStatusStack *, GProcContext *);
 
 
 
diff --git a/plugins/libcsem/semantic.c b/plugins/libcsem/semantic.c
index 4c5636b..0dc330e 100644
--- a/plugins/libcsem/semantic.c
+++ b/plugins/libcsem/semantic.c
@@ -39,9 +39,11 @@ DEFINE_CHRYSALIDE_ACTIVE_PLUGIN("LibC semantics", "Register semantic information
 
 /******************************************************************************
 *                                                                             *
-*  Paramètres  : plugin = greffon à manipuler.                                *
-*                action = type d'action attendue.                             *
-*                binary = binaire dont le contenu est en cours de traitement. *
+*  Paramètres  : plugin  = greffon à manipuler.                               *
+*                action  = type d'action attendue.                            *
+*                binary  = binaire dont le contenu est en cours de traitement.*
+*                status  = barre de statut à tenir informée.                  *
+*                context = contexte de désassemblage.                         *
 *                                                                             *
 *  Description : Exécute une action pendant un désassemblage de binaire.      *
 *                                                                             *
@@ -51,7 +53,7 @@ DEFINE_CHRYSALIDE_ACTIVE_PLUGIN("LibC semantics", "Register semantic information
 *                                                                             *
 ******************************************************************************/
 
-G_MODULE_EXPORT void process_binary_disassembly(const GPluginModule *plugin, PluginAction action, GLoadedBinary *binary)
+G_MODULE_EXPORT void process_binary_disassembly(const GPluginModule *plugin, PluginAction action, GLoadedBinary *binary, GtkStatusStack *status, GProcContext *context)
 {
     if (action == PGA_DISASSEMBLY_HOOKED_POST)
     {
diff --git a/plugins/libcsem/semantic.h b/plugins/libcsem/semantic.h
index 22ee6e3..ff92bab 100644
--- a/plugins/libcsem/semantic.h
+++ b/plugins/libcsem/semantic.h
@@ -31,7 +31,7 @@
 
 
 /* Exécute une action pendant un désassemblage de binaire. */
-G_MODULE_EXPORT void process_binary_disassembly(const GPluginModule *, PluginAction, GLoadedBinary *);
+G_MODULE_EXPORT void process_binary_disassembly(const GPluginModule *, PluginAction, GLoadedBinary *, GtkStatusStack *, GProcContext *);
 
 
 
diff --git a/plugins/pychrysalide/plugin.c b/plugins/pychrysalide/plugin.c
index 38d8785..f8b4fc8 100644
--- a/plugins/pychrysalide/plugin.c
+++ b/plugins/pychrysalide/plugin.c
@@ -89,7 +89,7 @@ static void g_python_plugin_handle_binary_content(const GPythonPlugin *, PluginA
 FormatMatchStatus python_plugin_is_matching(GBinContent *, GExeFormat *, GPythonPlugin *, char **);
 
 /* Exécute une action pendant un désassemblage de binaire. */
-static void g_python_plugin_process_disass(const GPythonPlugin *, PluginAction, GLoadedBinary *);
+static void g_python_plugin_process_disass(const GPythonPlugin *, PluginAction, GLoadedBinary *, GtkStatusStack *, GProcContext *);
 
 
 
@@ -763,9 +763,11 @@ FormatMatchStatus python_plugin_is_matching(GBinContent *content, GExeFormat *pa
 
 /******************************************************************************
 *                                                                             *
-*  Paramètres  : plugin = greffon à manipuler.                                *
-*                action = type d'action attendue.                             *
-*                binary = binaire dont le contenu est en cours de traitement. *
+*  Paramètres  : plugin  = greffon à manipuler.                               *
+*                action  = type d'action attendue.                            *
+*                binary  = binaire dont le contenu est en cours de traitement.*
+*                status  = barre de statut à tenir informée.                  *
+*                context = contexte de désassemblage.                         *
 *                                                                             *
 *  Description : Exécute une action pendant un désassemblage de binaire.      *
 *                                                                             *
@@ -775,15 +777,17 @@ FormatMatchStatus python_plugin_is_matching(GBinContent *content, GExeFormat *pa
 *                                                                             *
 ******************************************************************************/
 
-static void g_python_plugin_process_disass(const GPythonPlugin *plugin, PluginAction action, GLoadedBinary *binary)
+static void g_python_plugin_process_disass(const GPythonPlugin *plugin, PluginAction action, GLoadedBinary *binary, GtkStatusStack *status, GProcContext *context)
 {
     PyObject *args;                         /* Arguments pour l'appel      */
     PyObject *value;                        /* Valeurs obtenues            */
 
-    args = PyTuple_New(2);
+    args = PyTuple_New(4);
 
     PyTuple_SetItem(args, 0, PyLong_FromUnsignedLong(action));
     PyTuple_SetItem(args, 1, pygobject_new(G_OBJECT(binary)));
+    PyTuple_SetItem(args, 2, pygobject_new(G_OBJECT(status)));
+    PyTuple_SetItem(args, 3, pygobject_new(G_OBJECT(context)));
 
     value = run_python_method(plugin->instance, "process_binary_disassembly", args);
 
diff --git a/src/analysis/disass/disassembler.c b/src/analysis/disass/disassembler.c
index a88ba1e..6e71ed6 100644
--- a/src/analysis/disass/disassembler.c
+++ b/src/analysis/disass/disassembler.c
@@ -261,7 +261,7 @@ static void compute_disassembly(GLoadedBinary *binary, GProcContext *context, wg
 
         g_arch_processor_set_instructions(proc, instrs, count);
 
-        process_disassembly_event(PGA_DISASSEMBLY_RAW, binary);
+        process_disassembly_event(PGA_DISASSEMBLY_RAW, binary, status, context);
 
     }
 
@@ -275,7 +275,7 @@ static void compute_disassembly(GLoadedBinary *binary, GProcContext *context, wg
                                  g_instructions_study_do_link_operation,
                                  proc, context, format);
 
-        process_disassembly_event(PGA_DISASSEMBLY_HOOKED_LINK, binary);
+        process_disassembly_event(PGA_DISASSEMBLY_HOOKED_LINK, binary, status, context);
 
     }
 
@@ -287,7 +287,7 @@ static void compute_disassembly(GLoadedBinary *binary, GProcContext *context, wg
                              g_instructions_study_do_post_operation,
                              proc, context, format);
 
-    process_disassembly_event(PGA_DISASSEMBLY_HOOKED_POST, binary);
+    process_disassembly_event(PGA_DISASSEMBLY_HOOKED_POST, binary, status, context);
 
     /**
      * Quatrième étape : établissement des couvertures de routines restantes.
@@ -297,7 +297,7 @@ static void compute_disassembly(GLoadedBinary *binary, GProcContext *context, wg
                          _("Finding remaining limits..."),
                          g_routines_study_compute_limits, proc, G_BIN_FORMAT(format));
 
-    process_disassembly_event(PGA_DISASSEMBLY_LIMITED, binary);
+    process_disassembly_event(PGA_DISASSEMBLY_LIMITED, binary, status, context);
 
     /**
      * Cinquième étape : liaisons entre instructions.
@@ -309,7 +309,7 @@ static void compute_disassembly(GLoadedBinary *binary, GProcContext *context, wg
                                  g_instructions_study_establish_links,
                                  proc, context, format);
 
-        process_disassembly_event(PGA_DISASSEMBLY_LINKED, binary);
+        process_disassembly_event(PGA_DISASSEMBLY_LINKED, binary, status, context);
 
     }
 
@@ -321,7 +321,7 @@ static void compute_disassembly(GLoadedBinary *binary, GProcContext *context, wg
                          _("Control-flow analysis for routines..."),
                          g_routines_study_handle_blocks, proc, G_BIN_FORMAT(format));
 
-    process_disassembly_event(PGA_DISASSEMBLY_GROUPED, binary);
+    process_disassembly_event(PGA_DISASSEMBLY_GROUPED, binary, status, context);
 
     /**
      * Nettoyage final et sortie !
@@ -355,7 +355,7 @@ void disassemble_binary(GLoadedBinary *binary, wgroup_id_t gid, GtkStatusStack *
 
     /* Préparatifs */
 
-    process_disassembly_event(PGA_DISASSEMBLY_STARTED, binary);
+    process_disassembly_event(PGA_DISASSEMBLY_STARTED, binary, status, NULL);
 
     proc = g_loaded_binary_get_processor(binary);
 
@@ -367,7 +367,7 @@ void disassemble_binary(GLoadedBinary *binary, wgroup_id_t gid, GtkStatusStack *
 
     compute_disassembly(binary, *context, gid, status);
 
-    process_disassembly_event(PGA_DISASSEMBLY_ENDED, binary);
+    process_disassembly_event(PGA_DISASSEMBLY_ENDED, binary, status, *context);
 
 }
 
diff --git a/src/plugins/pglist.h b/src/plugins/pglist.h
index 4c8194d..20f0031 100644
--- a/src/plugins/pglist.h
+++ b/src/plugins/pglist.h
@@ -103,8 +103,8 @@ GPluginModule **get_all_plugins_for_action(PluginAction, size_t *);
 
 /* DPS_DISASSEMBLY */
 
-#define process_disassembly_event(a, b) \
-    process_all_plugins_for(a, g_plugin_module_process_disassembly_event, b)
+#define process_disassembly_event(a, b, s, c) \
+    process_all_plugins_for(a, g_plugin_module_process_disassembly_event, b, s, c)
 
 
 
diff --git a/src/plugins/plugin-int.h b/src/plugins/plugin-int.h
index 4625ec7..ee7c442 100644
--- a/src/plugins/plugin-int.h
+++ b/src/plugins/plugin-int.h
@@ -41,7 +41,7 @@
 typedef bool (* pg_management_fc) (GPluginModule *);
 
 /* Exécute une action pendant un désassemblage de binaire. */
-typedef void (* pg_process_disassembly_fc) (const GPluginModule *, PluginAction, GLoadedBinary *);
+typedef void (* pg_process_disassembly_fc) (const GPluginModule *, PluginAction, GLoadedBinary *, GtkStatusStack *, GProcContext *);
 
 
 
diff --git a/src/plugins/plugin.c b/src/plugins/plugin.c
index c74043d..3d1350d 100644
--- a/src/plugins/plugin.c
+++ b/src/plugins/plugin.c
@@ -777,6 +777,8 @@ bool g_plugin_module_preload_binary_format(const GPluginModule *plugin, PluginAc
 *  Paramètres  : plugin = greffon à manipuler.                                *
 *                action = type d'action attendue.                             *
 *                binary = binaire dont le contenu est en cours de traitement. *
+*                status  = barre de statut à tenir informée.                  *
+*                context = contexte de désassemblage.                         *
 *                                                                             *
 *  Description : Exécute une action pendant un désassemblage de binaire.      *
 *                                                                             *
@@ -786,8 +788,8 @@ bool g_plugin_module_preload_binary_format(const GPluginModule *plugin, PluginAc
 *                                                                             *
 ******************************************************************************/
 
-void g_plugin_module_process_disassembly_event(const GPluginModule *plugin, PluginAction action, GLoadedBinary *binary)
+void g_plugin_module_process_disassembly_event(const GPluginModule *plugin, PluginAction action, GLoadedBinary *binary, GtkStatusStack *status, GProcContext *context)
 {
-    plugin->process_disass(plugin, action, binary);
+    plugin->process_disass(plugin, action, binary, status, context);
 
 }
diff --git a/src/plugins/plugin.h b/src/plugins/plugin.h
index 5837078..17a9f33 100644
--- a/src/plugins/plugin.h
+++ b/src/plugins/plugin.h
@@ -101,7 +101,7 @@ bool g_plugin_module_handle_binary_format(const GPluginModule *, PluginAction, G
 bool g_plugin_module_preload_binary_format(const GPluginModule *, PluginAction, GBinFormat *, GPreloadInfo *, GtkStatusStack *);
 
 /* Exécute une action pendant un désassemblage de binaire. */
-void g_plugin_module_process_disassembly_event(const GPluginModule *, PluginAction, GLoadedBinary *);
+void g_plugin_module_process_disassembly_event(const GPluginModule *, PluginAction, GLoadedBinary *, GtkStatusStack *, GProcContext *);
 
 
 
-- 
cgit v0.11.2-87-g4458