diff options
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/pglist.h | 4 | ||||
-rw-r--r-- | src/plugins/plugin-def.h | 5 | ||||
-rw-r--r-- | src/plugins/plugin-int.h | 4 | ||||
-rw-r--r-- | src/plugins/plugin.c | 42 | ||||
-rw-r--r-- | src/plugins/plugin.h | 3 |
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 *); |