summaryrefslogtreecommitdiff
path: root/src/plugins/plugin.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/plugin.c')
-rw-r--r--src/plugins/plugin.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/plugins/plugin.c b/src/plugins/plugin.c
index a6dadb9..674b1a8 100644
--- a/src/plugins/plugin.c
+++ b/src/plugins/plugin.c
@@ -207,6 +207,7 @@ GPluginModule *g_plugin_module_new(const gchar *filename)
{
GPluginModule *result; /* Structure à retourner */
GModule *module; /* Abstration de manipulation */
+ pg_set_self_fc set_self; /* Copie du greffon */
const plugin_interface *interface; /* Déclaration d'interfaçage */
plugin_abi_version_t current; /* Version de l'ABI actuelle */
bool valid; /* Statut de validité */
@@ -243,6 +244,9 @@ GPluginModule *g_plugin_module_new(const gchar *filename)
/* Récupération de la version d'ABI */
+ if (!load_plugin_symbol(module, "chrysalide_plugin_set_self", &set_self))
+ goto no_self_setter;
+
if (!load_plugin_symbol(module, "_chrysalide_plugin", &interface))
goto no_interface;
@@ -398,11 +402,11 @@ GPluginModule *g_plugin_module_new(const gchar *filename)
case PGA_FORMAT_ANALYSIS_ENDED:
case PGA_FORMAT_POST_ANALYSIS_STARTED:
case PGA_FORMAT_POST_ANALYSIS_ENDED:
- valid = check_plugin_symbol(module, "handle_binary_format_analysis");
+ valid = check_plugin_symbol(module, "chrysalide_plugin_handle_binary_format_analysis");
break;
case PGA_FORMAT_PRELOAD:
- valid = check_plugin_symbol(module, "preload_binary_format");
+ valid = check_plugin_symbol(module, "chrysalide_plugin_preload_binary_format");
break;
case PGA_FORMAT_ATTACH_DEBUG:
@@ -420,7 +424,7 @@ GPluginModule *g_plugin_module_new(const gchar *filename)
break;
case DPS_DISASSEMBLY:
- valid = check_plugin_symbol(module, "process_binary_disassembly");
+ valid = check_plugin_symbol(module, "chrysalide_plugin_process_binary_disassembly");
break;
case DPS_DETECTION:
@@ -461,8 +465,15 @@ GPluginModule *g_plugin_module_new(const gchar *filename)
result->interface = interface;
+ set_self(result);
+
return result;
+ no_self_setter:
+
+ log_variadic_message(LMT_ERROR, _("Self pointer setter is missing for plugin '%s'"), filename);
+ goto bad_plugin;
+
no_interface:
log_variadic_message(LMT_ERROR, _("Main interface is missing for plugin '%s'"), filename);
@@ -652,12 +663,12 @@ static void g_plugin_module_init_gclass(GPluginModuleClass *class, GModule *modu
case PGA_FORMAT_ANALYSIS_ENDED:
case PGA_FORMAT_POST_ANALYSIS_STARTED:
case PGA_FORMAT_POST_ANALYSIS_ENDED:
- load_plugin_symbol(module, "handle_binary_format_analysis",
+ load_plugin_symbol(module, "chrysalide_plugin_handle_binary_format_analysis",
&class->handle_fmt_analysis);
break;
case PGA_FORMAT_PRELOAD:
- load_plugin_symbol(module, "preload_binary_format", &class->preload_format);
+ load_plugin_symbol(module, "chrysalide_plugin_preload_binary_format", &class->preload_format);
break;
case PGA_FORMAT_ATTACH_DEBUG:
@@ -673,7 +684,7 @@ static void g_plugin_module_init_gclass(GPluginModuleClass *class, GModule *modu
break;
case DPS_DISASSEMBLY:
- load_plugin_symbol(module, "process_binary_disassembly", &class->process_disass);
+ load_plugin_symbol(module, "chrysalide_plugin_process_binary_disassembly", &class->process_disass);
break;
case DPS_DETECTION: