summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2015-03-28 01:00:33 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2015-03-28 01:00:33 (GMT)
commit057cee1c3c109639af8f30e39e00f4884a353f31 (patch)
tree563972accde653fd562305424cb1983617bc0b4c /src/plugins
parenta6bedf6104ccd7d8050e9d6a58f32c0827e3383c (diff)
Provided readelf features as an external plugin.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@495 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/pglist.h4
-rw-r--r--src/plugins/plugin-def.h5
-rw-r--r--src/plugins/plugin-int.h4
-rw-r--r--src/plugins/plugin.c42
-rw-r--r--src/plugins/plugin.h3
5 files changed, 54 insertions, 4 deletions
diff --git a/src/plugins/pglist.h b/src/plugins/pglist.h
index d0176aa..071dc6c 100644
--- a/src/plugins/pglist.h
+++ b/src/plugins/pglist.h
@@ -65,6 +65,10 @@ const GPluginModule **get_all_plugins_for_action(PluginAction, size_t *);
#define find_matching_format()
+#define handle_binary_format(a, f) \
+ process_all_plugins_for(a, g_plugin_module_handle_binary_format, f)
+
+
/* DPS_DISASSEMBLY */
diff --git a/src/plugins/plugin-def.h b/src/plugins/plugin-def.h
index edab3a5..d7a37e4 100644
--- a/src/plugins/plugin-def.h
+++ b/src/plugins/plugin-def.h
@@ -116,9 +116,12 @@ typedef enum _PluginAction
* DPC_BINARY_PROCESSING | DPS_FORMAT
*/
- /* Détection et chargement */
+ /* Détection et chargement */
PGA_FORMAT_MATCHER = DPC_BINARY_PROCESSING | DPS_FORMAT | DEFINE_PLUGIN_ACTION(0),
+ /* Accompagnement du chargement (fin) */
+ PGA_FORMAT_LOADER_LAST = DPC_BINARY_PROCESSING | DPS_FORMAT | DEFINE_PLUGIN_ACTION(1),
+
/**
* DPC_BINARY_PROCESSING | DPS_DISASSEMBLY
*/
diff --git a/src/plugins/plugin-int.h b/src/plugins/plugin-int.h
index 1bf459c..41cc535 100644
--- a/src/plugins/plugin-int.h
+++ b/src/plugins/plugin-int.h
@@ -42,6 +42,9 @@ typedef bool (* pg_management_fc) (GPluginModule *);
/* Indique si le format peut être pris en charge ici. */
typedef bool (* pg_format_is_matching) (const GPluginModule *, GBinContent **);
+/* Procède à une opération liée au format de fichier uniquement. */
+typedef bool (* pg_handle_format) (const GPluginModule *, PluginAction, GBinFormat *);
+
/* Exécute une action pendant un désassemblage de binaire. */
typedef void (* pg_process_disassembly) (const GPluginModule *, PluginAction, GLoadedBinary *);
@@ -101,6 +104,7 @@ struct _GPluginModule
pg_format_is_matching is_matching; /* Recherche de correspondance */
+ pg_handle_format handle_format; /* Manipulation du format */
pg_process_disassembly proc_disass; /* Catégorie 'désassemblage' */
diff --git a/src/plugins/plugin.c b/src/plugins/plugin.c
index fca22c1..89a8040 100644
--- a/src/plugins/plugin.c
+++ b/src/plugins/plugin.c
@@ -252,8 +252,26 @@ GPluginModule *g_plugin_module_new(const gchar *filename)
switch (sub)
{
+ case DPS_FORMAT:
+ switch (result->interface->actions[i])
+ {
+ case PGA_FORMAT_LOADER_LAST:
+ if (!load_plugin_symbol(result->module,
+ "handle_binary_format", &result->handle_format))
+ goto bad_plugin;
+ break;
+
+ default:
+ log_variadic_message(LMT_WARNING,
+ _("Unknown action '0x%02x' in plugin '%s'..."),
+ result->interface->actions[i], filename);
+ break;
+
+ }
+
+ break;
case DPS_DISASSEMBLY:
if (!load_plugin_symbol(result->module,
@@ -423,6 +441,27 @@ void g_plugin_module_log_variadic_message(const GPluginModule *plugin, LogMessag
* *
* Paramètres : plugin = greffon à manipuler. *
* action = type d'action attendue. *
+* format = format de binaire à manipuler pendant l'opération. *
+* *
+* Description : Procède à une opération liée au format de fichier uniquement.*
+* *
+* Retour : Bilan de l'exécution du traitement. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool g_plugin_module_handle_binary_format(const GPluginModule *plugin, PluginAction action, GBinFormat *format)
+{
+ return plugin->handle_format(plugin, action, format);
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : plugin = greffon à manipuler. *
+* action = type d'action attendue. *
* binary = binaire dont le contenu est en cours de traitement. *
* *
* Description : Exécute une action pendant un désassemblage de binaire. *
@@ -435,9 +474,6 @@ void g_plugin_module_log_variadic_message(const GPluginModule *plugin, LogMessag
void g_plugin_module_process_disassembly_event(const GPluginModule *plugin, PluginAction action, GLoadedBinary *binary)
{
- printf("plugin = %p\n", plugin);
- printf("plugin->proc_disass = %p\n", plugin->proc_disass);
-
plugin->proc_disass(plugin, action, binary);
}
diff --git a/src/plugins/plugin.h b/src/plugins/plugin.h
index 835b1c7..d571659 100644
--- a/src/plugins/plugin.h
+++ b/src/plugins/plugin.h
@@ -61,6 +61,9 @@ const plugin_interface *g_plugin_module_get_interface(const GPluginModule *);
+/* Procède à une opération liée au format de fichier uniquement. */
+bool g_plugin_module_handle_binary_format(const GPluginModule *, PluginAction, GBinFormat *);
+
/* Exécute une action pendant un désassemblage de binaire. */
void g_plugin_module_process_disassembly_event(const GPluginModule *, PluginAction, GLoadedBinary *);