diff options
Diffstat (limited to 'src/plugins/plugin.c')
-rw-r--r-- | src/plugins/plugin.c | 23 |
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: |