diff options
Diffstat (limited to 'plugins/elf/core.c')
-rw-r--r-- | plugins/elf/core.c | 50 |
1 files changed, 48 insertions, 2 deletions
diff --git a/plugins/elf/core.c b/plugins/elf/core.c index 0cfd49c..7486242 100644 --- a/plugins/elf/core.c +++ b/plugins/elf/core.c @@ -24,7 +24,7 @@ #include "core.h" -#include <core/formats.h> +#include <core/global.h> #include <plugins/plugin-def.h> @@ -34,7 +34,7 @@ DEFINE_CHRYSALIDE_PLUGIN("elf", "Add support for the ELF format", "0.1.0", - RL("PyChrysalide"), AL(PGA_PLUGIN_INIT)); + RL("PyChrysalide"), AL(PGA_PLUGIN_INIT, PGA_CONTENT_RESOLVER)); @@ -65,3 +65,49 @@ G_MODULE_EXPORT bool chrysalide_plugin_init(GPluginModule *plugin) return result; } + + +/****************************************************************************** +* * +* Paramètres : plugin = greffon à manipuler. * +* action = type d'action attendue. * +* content = contenu binaire à traiter. * +* gid = identifiant du groupe de traitement. * +* status = barre de statut à tenir informée. * +* * +* Description : Procède à une opération liée à un contenu binaire. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +G_MODULE_EXPORT void chrysalide_plugin_handle_binary_content(const GPluginModule *plugin, PluginAction action, GBinContent *content, gid_t gid, GtkStatusStack *status) +{ + vmpa2t addr; /* Tête de lecture initiale */ + bool test; /* Bilan des accès mémoire */ + char magic[SELFMAG]; /* Idenfiant standard */ + GExeFormat *format; /* Format ELF reconnu */ + GLoadedContent *loaded; /* Représentation chargée */ + GContentResolver *resolver; /* Resolveur de contenus */ + + init_vmpa(&addr, 0, VMPA_NO_VIRTUAL); + + test = g_binary_content_read_raw(content, &addr, SELFMAG, (bin_t *)magic); + + if (test) + test = (memcmp(magic, ELFMAG, SELFMAG) == 0); + + if (test) + { + format = g_elf_format_new(content); + loaded = g_loaded_binary_new(format); + + resolver = get_current_content_resolver(); + g_content_resolver_add_detected(resolver, gid, loaded); + g_object_unref(G_OBJECT(resolver)); + + } + +} |