diff options
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/pglist.c | 30 | ||||
-rw-r--r-- | src/plugins/pglist.h | 7 | ||||
-rw-r--r-- | src/plugins/plugin-def.h | 26 | ||||
-rw-r--r-- | src/plugins/plugin.c | 2 |
4 files changed, 52 insertions, 13 deletions
diff --git a/src/plugins/pglist.c b/src/plugins/pglist.c index 3fd2cb0..14e6b48 100644 --- a/src/plugins/pglist.c +++ b/src/plugins/pglist.c @@ -2,7 +2,7 @@ /* OpenIDA - Outil d'analyse de fichiers binaires * pglist.c - gestion de l'ensemble des greffons * - * Copyright (C) 2009-2010 Cyrille Bagard + * Copyright (C) 2009-2012 Cyrille Bagard * * This file is part of OpenIDA. * @@ -33,7 +33,7 @@ #include <config.h> -#include "plugin.h" +#include "plugin-int.h" #include "../common/extstr.h" @@ -207,7 +207,7 @@ GPluginModule *get_one_plugin_for_action(PluginAction action) * Paramètres : action = fonctionnalité recherchée. * * count = nombre de greffons trouvés. [OUT] * * * -* Description : Founit less greffons offrant le service demandé. * +* Description : Founit les greffons offrant le service demandé. * * * * Retour : Liste de greffons correspondants à libérer de la mémoire. * * * @@ -257,3 +257,27 @@ void add_plugin_to_main_list(GPluginModule *plugin) list->plugins[list->plugins_count - 1] = plugin; } + + +/****************************************************************************** +* * +* Paramètres : binary = binaire chargé en mémoire à traiter. * +* action = fonctionnalité recherchée. * +* * +* Description : Opère une action donnée sur un binaire défini. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void run_plugins_on_binary(GLoadedBinary *binary, PluginAction action) +{ + size_t i; /* Boucle de parcours */ + + for (i = 0; i < _list.plugins_count; i++) + if (g_plugin_module_get_action(_list.plugins[i]) & action) + g_plugin_module_execute_action_on_binary(_list.plugins[i], binary, action); + +} diff --git a/src/plugins/pglist.h b/src/plugins/pglist.h index 36b998e..2804108 100644 --- a/src/plugins/pglist.h +++ b/src/plugins/pglist.h @@ -2,7 +2,7 @@ /* OpenIDA - Outil d'analyse de fichiers binaires * pglist.h - prototypes pour la gestion de l'ensemble des greffons * - * Copyright (C) 2009 Cyrille Bagard + * Copyright (C) 2009-2012 Cyrille Bagard * * This file is part of OpenIDA. * @@ -42,7 +42,10 @@ bool init_all_plugins(GObject *); GPluginModule *get_one_plugin_for_action(PluginAction); /* Founit less greffons offrant le service demandé. */ -GPluginModule **get_all_plugins_for_action(PluginAction, size_t *); +GPluginModule **get_all_plugins_for_action(PluginAction, size_t *) __attribute__ ((deprecated)); + +/*Opère une action donnée sur un binaire défini. */ +void run_plugins_on_binary(GLoadedBinary *, PluginAction); diff --git a/src/plugins/plugin-def.h b/src/plugins/plugin-def.h index c1579b2..602b296 100644 --- a/src/plugins/plugin-def.h +++ b/src/plugins/plugin-def.h @@ -43,22 +43,34 @@ typedef enum _PluginType /* Action(s) menée(s) par le greffon */ typedef enum _PluginAction { - PGA_NONE = (0 << 0), /* Aucun intérêt */ + PGA_NONE = (0 << 0), /* Aucun intérêt */ - PGA_FORMAT_MATCHER = (1 << 0), /* Détection et chargement */ + PGA_FORMAT_MATCHER = (1 << 0), /* Détection et chargement */ - PGA_DISASSEMBLE = (1 << 1), /* Désassemblage (non trivial) */ + PGA_DISASSEMBLE = (1 << 1), /* Désassemblage (non trivial) */ - PGA_DISASS_PROCESS = (1 << 2), /* Traitement niveau assembleur*/ - PGA_CODE_PROCESS = (1 << 3), /* Traitement du code existant */ + PGA_BINARY_DISASSEMBLED = (1 << 2), /* Désassemblage fini */ + PGA_BINARY_LINKED = (1 << 3), /* Liaison en place */ + PGA_BINARY_BOUNDED = (1 << 4), /* Limites de routines définies*/ + PGA_BINARY_PRINTED = (1 << 5), /* Instructions imprimées */ - PGA_DEBUGGER_ATTACH = (1 << 4), /* Activation d'un débogueur */ - PGA_DEBUGGER_DETACH = (1 << 5) /* Désactivation d'un débogueur*/ + PGA_DISASS_PROCESS = (1 << 6), /* Traitement niveau assembleur*/ + PGA_CODE_PROCESS = (1 << 7), /* Traitement du code existant */ + + PGA_DEBUGGER_ATTACH = (1 << 8), /* Activation d'un débogueur */ + PGA_DEBUGGER_DETACH = (1 << 9) /* Désactivation d'un débogueur*/ } PluginAction; +/* Actions éligibles pour run_plugins_on_binary() */ +#define PGA_BINARY_ACTIONS ( 0 \ + | PGA_BINARY_DISASSEMBLED | PGA_BINARY_LINKED \ + | PGA_BINARY_BOUNDED | PGA_BINARY_PRINTED \ + ) + + /* Fournit une indication sur le(s) type(s) du greffon présent. */ typedef PluginType (* get_plugin_type_fc) (void); diff --git a/src/plugins/plugin.c b/src/plugins/plugin.c index 416c647..c6a49c6 100644 --- a/src/plugins/plugin.c +++ b/src/plugins/plugin.c @@ -153,7 +153,7 @@ GPluginModule *g_plugin_module_new(const gchar *filename, GObject *ref) result->get_action = get_action; - if (g_plugin_module_get_action(result) & (PGA_DISASSEMBLE | PGA_DISASS_PROCESS | PGA_CODE_PROCESS)) + if (g_plugin_module_get_action(result) & (PGA_BINARY_ACTIONS | /* FIXME : supprimer le reste */ PGA_DISASSEMBLE | PGA_DISASS_PROCESS | PGA_CODE_PROCESS)) { if (!g_module_symbol(result->module, "execute_action_on_binary", (gpointer *)&result->exec_on_bin)) { |