diff options
Diffstat (limited to 'plugins/pe')
| -rw-r--r-- | plugins/pe/core-int.h | 56 | ||||
| -rw-r--r-- | plugins/pe/core.c | 280 | ||||
| -rw-r--r-- | plugins/pe/core.h | 14 | 
3 files changed, 337 insertions, 13 deletions
| diff --git a/plugins/pe/core-int.h b/plugins/pe/core-int.h new file mode 100644 index 0000000..1d1b817 --- /dev/null +++ b/plugins/pe/core-int.h @@ -0,0 +1,56 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * core-int.h - prototypes internes pour l'intégration du support du format PE + * + * Copyright (C) 2025 Cyrille Bagard + * + *  This file is part of Chrysalide. + * + *  Chrysalide is free software; you can redistribute it and/or modify + *  it under the terms of the GNU General Public License as published by + *  the Free Software Foundation; either version 3 of the License, or + *  (at your option) any later version. + * + *  Chrysalide is distributed in the hope that it will be useful, + *  but WITHOUT ANY WARRANTY; without even the implied warranty of + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *  GNU General Public License for more details. + * + *  You should have received a copy of the GNU General Public License + *  along with Chrysalide.  If not, see <http://www.gnu.org/licenses/>. + */ + + +#ifndef _PLUGINS_PE_CORE_INT_H +#define _PLUGINS_PE_CORE_INT_H + + +#include "core.h" + + +#include <plugins/native-int.h> + + + +/* Greffon natif pour le support du format PE (instance) */ +struct _GPePlugin +{ +    GNativePlugin parent;                   /* A laisser en premier        */ + +}; + + +/* Greffon natif pour le support du format PE (classe) */ +struct _GPePluginClass +{ +    GNativePluginClass parent;              /* A laisser en premier        */ + +}; + + +/* Met en place un module pour un greffon de support PE. */ +bool g_pe_plugin_create(GPePlugin *, GModule *); + + + +#endif  /* _PLUGINS_PE_CORE_INT_H */ diff --git a/plugins/pe/core.c b/plugins/pe/core.c index e8e6f5e..42f712d 100644 --- a/plugins/pe/core.c +++ b/plugins/pe/core.c @@ -24,35 +24,244 @@  #include "core.h" -#include <core/global.h> +//#include <core/global.h>  #include <plugins/self.h> +#include "core-int.h"  #include "format.h"  #ifdef INCLUDE_PYTHON3_BINDINGS  #   include "python/module.h"  #endif + +/* ---------------------- COMPOSITION DE NOUVEAU GREFFON NATIF ---------------------- */ + + +/* Initialise la classe des greffons de support PE. */ +static void g_pe_plugin_class_init(GPePluginClass *); + +/* Procède à l'initialisation de l'interface de gestion. */ +//static void g_pe_plugin_plugin_manager_interface_init(GPluginManagerInterface *); + +/* Initialise une instance de greffon de support PE. */ +static void g_pe_plugin_init(GPePlugin *); + +/* Supprime toutes les références externes. */ +static void g_pe_plugin_dispose(GPePlugin *); + +/* Procède à la libération totale de la mémoire. */ +static void g_pe_plugin_finalize(GPePlugin *); + + + +/* --------------------- IMPLEMENTATION DES FONCTIONS DE CLASSE --------------------- */ + + +/* Prend acte de l'activation du greffon. */ +static bool g_pe_plugin_enable(GPePlugin *); + +/* Prend acte de l'extinction du greffon. */ +static void g_pe_plugin_disable(GPePlugin *); + + + +/* ---------------------------------------------------------------------------------- */ +/*                        COMPOSITION DE NOUVEAU GREFFON NATIF                        */ +/* ---------------------------------------------------------------------------------- */ + + +/* Indique le type défini pour un greffon de liaison Python */ +G_DEFINE_TYPE_WITH_CODE(GPePlugin, g_pe_plugin, G_TYPE_NATIVE_PLUGIN, +                        /*G_IMPLEMENT_INTERFACE(G_TYPE_PLUGIN_MANAGER, g_pe_plugin_plugin_manager_interface_init)*/); + + +NATIVE_PLUGIN_ENTRYPOINT(g_pe_plugin_new); + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : class = classe à initialiser.                                * +*                                                                             * +*  Description : Initialise la classe des greffons de support PE.         * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static void g_pe_plugin_class_init(GPePluginClass *class) +{ +    GObjectClass *object;                   /* Autre version de la classe  */ +    GPluginModuleClass *plugin;             /* Version parente de la classe*/ + +    object = G_OBJECT_CLASS(class); + +    object->dispose = (GObjectFinalizeFunc/* ! */)g_pe_plugin_dispose; +    object->finalize = (GObjectFinalizeFunc)g_pe_plugin_finalize; + +    plugin = G_PLUGIN_MODULE_CLASS(class); + +    plugin->enable = (pg_management_fc)g_pe_plugin_enable; +    plugin->disable = (pg_management_fc)g_pe_plugin_disable; + +} + +#if 0 + +/****************************************************************************** +*                                                                             * +*  Paramètres  : iface = interface GLib à initialiser.                        * +*                                                                             * +*  Description : Procède à l'initialisation de l'interface de gestion.        * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static void g_pe_plugin_plugin_manager_interface_init(GPluginManagerInterface *iface) +{ +    iface->handle_native = (handle_native_plugins_cb)g_pe_plugin_handle_native_plugins_loaded_event; + +} + +#endif + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : plugin = instance à initialiser.                             * +*                                                                             * +*  Description : Initialise une instance de greffon de support PE.            * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static void g_pe_plugin_init(GPePlugin *plugin) +{ +    STORE_PLUGIN_ABI(plugin); + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : plugin = instance d'objet GLib à traiter.                    * +*                                                                             * +*  Description : Supprime toutes les références externes.                     * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static void g_pe_plugin_dispose(GPePlugin *plugin) +{ +    G_OBJECT_CLASS(g_pe_plugin_parent_class)->dispose(G_OBJECT(plugin)); + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : plugin = instance d'objet GLib à traiter.                    * +*                                                                             * +*  Description : Procède à la libération totale de la mémoire.                * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static void g_pe_plugin_finalize(GPePlugin *plugin) +{ +    G_OBJECT_CLASS(g_pe_plugin_parent_class)->finalize(G_OBJECT(plugin)); + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : filename = nom du fichier à charger.                         * +*                                                                             * +*  Description : Crée un module pour un greffon de support PE.                * +*                                                                             * +*  Retour      : Adresse de la structure mise en place.                       * +*                                                                             * +*  Remarques   : Le transfert de propriétée du module est total.              * +*                                                                             * +******************************************************************************/ + +GPluginModule *g_pe_plugin_new(GModule *module) +{ +    GPePlugin *result;                      /* Structure à retourner       */ + +    result = g_object_new(G_TYPE_PE_PLUGIN, NULL); + +    if (!g_pe_plugin_create(result, module)) +        g_clear_object(&result); + +    return G_PLUGIN_MODULE(result); + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : plugin = instance à initialiser pleinement.                  * +*                module = module système correspondant.                       * +*                                                                             * +*  Description : Met en place un module pour un greffon de support PE.        * +*                                                                             * +*  Retour      : Bilan de l'opération.                                        * +*                                                                             * +*  Remarques   : Le transfert de propriétée du module est total.              * +*                                                                             * +******************************************************************************/ + +bool g_pe_plugin_create(GPePlugin *plugin, GModule *module) +{ +    bool result;                            /* Bilan à retourner           */ +  #ifdef INCLUDE_PYTHON3_BINDINGS -#   define PG_REQ RL("PyChrysalide") +#   define PG_REQ REQ_LIST("PyChrysalide")  #else  #   define PG_REQ NO_REQ  #endif +    result = g_native_plugin_create(G_NATIVE_PLUGIN(plugin), +                                    "PeFmt", +                                    "PE format support", +                                    PACKAGE_VERSION, +                                    CHRYSALIDE_WEBSITE("doc/formats"), +                                    PG_REQ, +                                    module); +    return result; + +} -DEFINE_CHRYSALIDE_PLUGIN("Pe", "PE format support", -                         PACKAGE_VERSION, CHRYSALIDE_WEBSITE("doc/formats"), -                         PG_REQ, AL(PGA_PLUGIN_INIT));//, PGA_CONTENT_RESOLVER)); +/* ---------------------------------------------------------------------------------- */ +/*                       IMPLEMENTATION DES FONCTIONS DE CLASSE                       */ +/* ---------------------------------------------------------------------------------- */ +  /******************************************************************************  *                                                                             *  *  Paramètres  : plugin = greffon à manipuler.                                *  *                                                                             * -*  Description : Prend acte du chargement du greffon.                         * +*  Description : Prend acte de l'activation du greffon.                       *  *                                                                             *  *  Retour      : -                                                            *  *                                                                             * @@ -60,7 +269,7 @@ DEFINE_CHRYSALIDE_PLUGIN("Pe", "PE format support",  *                                                                             *  ******************************************************************************/ -G_MODULE_EXPORT bool chrysalide_plugin_init(GPluginModule *plugin) +static bool g_pe_plugin_enable(GPePlugin *plugin)  {      bool result;                            /* Bilan à retourner           */ @@ -77,6 +286,60 @@ G_MODULE_EXPORT bool chrysalide_plugin_init(GPluginModule *plugin)  /******************************************************************************  *                                                                             * +*  Paramètres  : plugin = greffon à manipuler.                                * +*                                                                             * +*  Description : Prend acte de l'extinction du greffon.                       * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static void g_pe_plugin_disable(GPePlugin *plugin) +{ + +} + + + +#if 0 + +/* ---------------------------------------------------------------------------------- */ +/*                      INTERVENTION DANS LA GESTION DE GREFFONS                      */ +/*                      INTERVENTION DANS LA GESTION DE GREFFONS                      */ +/*                      INTERVENTION DANS LA GESTION DE GREFFONS                      */ +/* ---------------------------------------------------------------------------------- */ + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : plugin = interface à manipuler.                              * +*                                                                             * +*  Description : Accompagne la fin du chargement des modules natifs.          * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static void g_pe_plugin_handle_native_plugins_loaded_event(GPePlugin *plugin) +{ +    PyGILState_STATE gstate;                /* Sauvegarde d'environnement  */ + +    gstate = PyGILState_Ensure(); + +    load_python_plugins(G_PLUGIN_MODULE(plugin)); + +    PyGILState_Release(gstate); + +} + + + +/****************************************************************************** +*                                                                             *  *  Paramètres  : plugin  = greffon à manipuler.                               *  *                action  = type d'action attendue.                            *  *                content = contenu binaire à traiter.                         * @@ -115,3 +378,6 @@ G_MODULE_EXPORT void chrysalide_plugin_handle_binary_content(const GPluginModule  }  #endif + + +#endif diff --git a/plugins/pe/core.h b/plugins/pe/core.h index 2d9aeb5..5c0696f 100644 --- a/plugins/pe/core.h +++ b/plugins/pe/core.h @@ -2,7 +2,7 @@  /* Chrysalide - Outil d'analyse de fichiers binaires   * core.h - prototypes pour l'intégration du support du format PE   * - * Copyright (C) 2017-2018 Cyrille Bagard + * Copyright (C) 2017-2025 Cyrille Bagard   *   *  This file is part of Chrysalide.   * @@ -25,16 +25,18 @@  #define _PLUGINS_PE_CORE_H +#include <glibext/helpers.h>  #include <plugins/plugin.h> -#include <plugins/plugin-int.h> -/* Prend acte du chargement du greffon. */ -G_MODULE_EXPORT bool chrysalide_plugin_init(GPluginModule *); +#define G_TYPE_PE_PLUGIN (g_pe_plugin_get_type()) -/* Procède à une opération liée à un contenu binaire. */ -//G_MODULE_EXPORT void chrysalide_plugin_handle_binary_content(const GPluginModule *, PluginAction, GBinContent *, wgroup_id_t, GtkStatusStack *); +DECLARE_GTYPE(GPePlugin, g_pe_plugin, G, PE_PLUGIN); + + +/* Crée un module pour un greffon de support PE. */ +GPluginModule *g_pe_plugin_new(GModule *); | 
