summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/pglist.c35
-rw-r--r--src/plugins/pglist.h3
-rw-r--r--src/plugins/plugin-def.h11
-rw-r--r--src/plugins/plugin.c19
-rw-r--r--src/plugins/plugin.h4
5 files changed, 53 insertions, 19 deletions
diff --git a/src/plugins/pglist.c b/src/plugins/pglist.c
index 85421e6..6d47f57 100644
--- a/src/plugins/pglist.c
+++ b/src/plugins/pglist.c
@@ -77,7 +77,7 @@ bool init_all_plugins(GObject *ref)
{
_list.ref = ref;
- browse_directory_for_plugins(&_list, PACKAGE_SOURCE_DIR "/src/plugins");
+ browse_directory_for_plugins(&_list, PACKAGE_SOURCE_DIR "/plugins");
return true;
@@ -200,3 +200,36 @@ GPluginModule *get_one_plugin_for_action(PluginAction action)
return result;
}
+
+
+/******************************************************************************
+* *
+* Paramètres : action = fonctionnalité recherchée. *
+* count = nombre de greffons trouvés. [OUT] *
+* *
+* Description : Founit less greffons offrant le service demandé. *
+* *
+* Retour : Liste de greffons correspondants à libérer de la mémoire. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+GPluginModule **get_all_plugins_for_action(PluginAction action, size_t *count)
+{
+ GPluginModule **result; /* Greffon à retourner */
+ size_t i; /* Boucle de parcours */
+
+ result = NULL;
+ *count = 0;
+
+ for (i = 0; i < _list.plugins_count; i++)
+ if (g_plugin_module_get_action(_list.plugins[i]) & action)
+ {
+ result = (GPluginModule **)realloc(result, ++(*count) * sizeof(GPluginModule *));
+ result[*count - 1] = _list.plugins[i];
+ }
+
+ return result;
+
+}
diff --git a/src/plugins/pglist.h b/src/plugins/pglist.h
index 4aa77cd..36b998e 100644
--- a/src/plugins/pglist.h
+++ b/src/plugins/pglist.h
@@ -41,6 +41,9 @@ bool init_all_plugins(GObject *);
/* Founit un greffon offrant le service demandé. */
GPluginModule *get_one_plugin_for_action(PluginAction);
+/* Founit less greffons offrant le service demandé. */
+GPluginModule **get_all_plugins_for_action(PluginAction, size_t *);
+
#endif /* _PLUGINS_PGLIST_H */
diff --git a/src/plugins/plugin-def.h b/src/plugins/plugin-def.h
index 68167e2..44dd3fa 100644
--- a/src/plugins/plugin-def.h
+++ b/src/plugins/plugin-def.h
@@ -27,14 +27,15 @@
#include "../analysis/binary.h"
-#include "../analysis/line.h"
/* Action(s) menée(s) par le greffon */
typedef enum _PluginAction
{
- PGA_DISASSEMBLE = (1 << 0) /* Désassemblage (non trivial) */
+ PGA_DISASSEMBLE = (1 << 0), /* Désassemblage (non trivial) */
+
+ PGA_CODE_PROCESS = (1 << 1) /* Traitement du code existant */
} PluginAction;
@@ -45,10 +46,8 @@ typedef enum _PluginAction
/* Fournit une indication sur le type d'opération(s) menée(s). */
typedef PluginAction (* get_plugin_action_fc) (void);
-
-
-/* S'occupe du désassemblage (pur) de code binaire. */
-typedef GRenderingLine * (* disassemble_binary_parts_fc) (openida_binary *);
+/* Exécute une action définie sur un binaire chargé. */
+typedef bool (* execute_action_on_binary_fc) (openida_binary *, PluginAction);
diff --git a/src/plugins/plugin.c b/src/plugins/plugin.c
index 80daa74..0165dfa 100644
--- a/src/plugins/plugin.c
+++ b/src/plugins/plugin.c
@@ -48,7 +48,7 @@ struct _GPluginModule
init_plugin_fc init; /* Procédure d'initialisation */
- disassemble_binary_parts_fc disassemble;/* Fonction de désassemblage */
+ execute_action_on_binary_fc exec_on_bin;/* Action sur un binaire */
};
@@ -145,11 +145,9 @@ GPluginModule *g_plugin_module_new(const gchar *filename, GObject *ref)
result->action = __get_action();
-
- /* ... */
- if (result->action & PGA_DISASSEMBLE)
+ if (result->action & (PGA_DISASSEMBLE | PGA_CODE_PROCESS))
{
- if (!g_module_symbol(result->module, "disassemble_binary_parts", (gpointer *)&result->disassemble))
+ if (!g_module_symbol(result->module, "execute_action_on_binary", (gpointer *)&result->exec_on_bin))
{
printf("Err plugin disass sym\n");
//g_object_destroy(result);
@@ -202,18 +200,19 @@ PluginAction g_plugin_module_get_action(const GPluginModule *plugin)
/******************************************************************************
* *
* Paramètres : plugin = greffon à consulter. *
-* binary = binaire dont le contenu est à désassembler. *
+* binary = binaire dont le contenu est à traiter. *
+* action = action attendue. *
* *
-* Description : S'occupe du désassemblage (pur) de code binaire. *
+* Description : Exécute une action définie sur un binaire chargé. *
* *
-* Retour : Lignes de code pour la représentation à insérer. *
+* Retour : true si une action a été menée, false sinon. *
* *
* Remarques : - *
* *
******************************************************************************/
-GRenderingLine *g_plugin_module_disassemble_binary_parts(const GPluginModule *plugin, openida_binary *binary)
+bool g_plugin_module_execute_action_on_binary(const GPluginModule *plugin, openida_binary *binary, PluginAction action)
{
- return plugin->disassemble(binary);
+ return plugin->exec_on_bin(binary, action);
}
diff --git a/src/plugins/plugin.h b/src/plugins/plugin.h
index 455f17c..032f699 100644
--- a/src/plugins/plugin.h
+++ b/src/plugins/plugin.h
@@ -57,8 +57,8 @@ GPluginModule *g_plugin_module_new(const gchar *, GObject *);
/* Indique les opérations offertes par un greffon donné. */
PluginAction g_plugin_module_get_action(const GPluginModule *);
-/* S'occupe du désassemblage (pur) de code binaire. */
-GRenderingLine *g_plugin_module_disassemble_binary_parts(const GPluginModule *, openida_binary *);
+/* Exécute une action définie sur un binaire chargé. */
+bool g_plugin_module_execute_action_on_binary(const GPluginModule *, openida_binary *, PluginAction);