diff options
Diffstat (limited to 'plugins/dex/core.c')
-rw-r--r-- | plugins/dex/core.c | 55 |
1 files changed, 49 insertions, 6 deletions
diff --git a/plugins/dex/core.c b/plugins/dex/core.c index 05130a6..869ef4b 100644 --- a/plugins/dex/core.c +++ b/plugins/dex/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("dex", "Add support for the DEX format", "0.1.0", - RL("PyChrysalide", "dexbnf"), AL(PGA_PLUGIN_INIT)); + RL("PyChrysalide", "dexbnf"), AL(PGA_PLUGIN_INIT, PGA_CONTENT_RESOLVER)); @@ -54,10 +54,7 @@ G_MODULE_EXPORT bool chrysalide_plugin_init(GPluginModule *plugin) { bool result; /* Bilan à retourner */ - result = register_format_matcher(dex_is_matching, NULL); - - if (result) - result = register_format_loader("dex", "Dalvik Executable format", g_dex_format_new); + result = register_format_loader("dex", "Dalvik Executable format", g_dex_format_new); if (result) result = add_format_dex_module_to_python_module(); @@ -65,3 +62,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[DEX_FILE_MAGIC_LEN]; /* Idenfiant standard */ + GExeFormat *format; /* Format DEX 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, DEX_FILE_MAGIC_LEN, (bin_t *)magic); + + if (test) + test = (memcmp(magic, DEX_FILE_MAGIC, DEX_FILE_MAGIC_LEN) == 0); + + if (test) + { + format = g_dex_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)); + + } + +} |