summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/pglist.c30
-rw-r--r--src/plugins/pglist.h7
-rw-r--r--src/plugins/plugin-def.h26
-rw-r--r--src/plugins/plugin.c2
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))
{