diff options
Diffstat (limited to 'src/format/format.c')
-rw-r--r-- | src/format/format.c | 154 |
1 files changed, 4 insertions, 150 deletions
diff --git a/src/format/format.c b/src/format/format.c index b44d8ed..c779947 100644 --- a/src/format/format.c +++ b/src/format/format.c @@ -40,16 +40,6 @@ -#ifndef _ -# define _(str) str -#endif - - - - -/* ------------------------ TRAITEMENT INDIVIDUEL DE FORMATS ------------------------ */ - - /* Initialise la classe des formats binaires génériques. */ static void g_binary_format_class_init(GBinFormatClass *); @@ -58,43 +48,6 @@ static void g_binary_format_init(GBinFormat *); -/* ----------------------- MANIPULATION D'ENSEMBLE DE FORMATS ----------------------- */ - - -/* Format d'exécutables enregistré */ -typedef struct _registered_format -{ - const char *name; /* Désignation du format */ - - FormatType type; /* Type de format */ - - format_match_fc match; /* Procédure de reconnaissance */ - format_load_fc load; /* Fonction de chargement */ - -} registered_format; - - -/* Liste des formats d'exécutables enregistrés */ -static registered_format _formats[FID_COUNT]; - - -#define register_format(id, n, t, m, l) \ - do \ - { \ - _formats[id].name = n; \ - _formats[id].type = t; \ - _formats[id].match = m; \ - _formats[id].load = l; \ - } \ - while (0) - - - -/* ---------------------------------------------------------------------------------- */ -/* TRAITEMENT INDIVIDUEL DE FORMATS */ -/* ---------------------------------------------------------------------------------- */ - - /* Indique le type défini pour un format binaire générique. */ G_DEFINE_TYPE(GBinFormat, g_binary_format, G_TYPE_OBJECT); @@ -149,10 +102,11 @@ static void g_binary_format_init(GBinFormat *format) * * ******************************************************************************/ -void g_binary_format_set_content(GBinFormat *format, const bin_t *content, off_t length) +void g_binary_format_set_content(GBinFormat *format, GBinContent *content) { - format->content = content; - format->length = length; + + + format->content = g_binary_content_get(content, &format->length); } @@ -507,103 +461,3 @@ bool g_binary_format_resolve_relative_routine(const GBinFormat *format, const ch return result; } - - - -/* ---------------------------------------------------------------------------------- */ -/* MANIPULATION D'ENSEMBLE DE FORMATS */ -/* ---------------------------------------------------------------------------------- */ - - -/****************************************************************************** -* * -* Paramètres : - * -* * -* Description : Procède au chargement des formats binaires reconnus. * -* * -* Retour : true pour indiquer un chargement réussi, false sinon. * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool init_all_formats(void) -{ - register_format(FID_DEX, _("Dalvik Executable"), FMT_EXEC, dex_is_matching, g_dex_format_new); - //register_format(FID_DWARF, _("Dwarf"), FMT_DEBUG, dwarf_is_matching, g_dwarf_format_new); - register_format(FID_ELF, _("ELF"), FMT_EXEC, elf_is_matching, g_elf_format_new); - register_format(FID_JAVA, _("Java"), FMT_EXEC, java_is_matching, g_java_format_new); - register_format(FID_PE, _("PE"), FMT_EXEC, pe_is_matching, g_pe_format_new); - - return true; - -} - - -/****************************************************************************** -* * -* Paramètres : type = type de format recherché. * -* filename = fichier d'origine des données initiales. * -* content = contenu binaire à parcourir. [OUT] * -* length = taille du contenu en question. [OUT] * -* * -* Description : Charge si possible un nouveau format binaire. * -* * -* Retour : Adresse du nouveau gestionnaire de format ou NULL si erreur. * -* * -* Remarques : - * -* * -******************************************************************************/ - -GBinFormat *load_new_format(FormatType type, const char *filename, bin_t **content, off_t *length) -{ - GBinFormat *result; /* Adresse à retourner */ - char *tmp; /* Nom de fichier modifiable */ - GPluginModule **pglist; /* Liste de greffons */ - size_t pgcount; /* Taille de cette liste */ - size_t i; /* Boucle de parcours */ - - result = NULL; - - tmp = strdup(filename); - - pgcount = 0; - pglist = NULL;//get_all_plugins_for_action(PGA_FORMAT_MATCHER, &pgcount); - - if (pgcount > 0) - { - lnf_rescan: - - for (i = 0; i < pgcount; i++) - switch (0/*g_plugin_module_is_matching(pglist[i], &tmp, content, length)*/) - { - case MFA_MATCHED: - /* FIXME */ - break; - - case MFA_RELOAD: - //goto lnf_rescan; - break; - - default: - break; - - } - - free(pglist); - - } - - if (tmp == NULL) - free(tmp); - - for (i = 0; i < FID_COUNT && result == NULL; i++) - if (_formats[i].type == type && _formats[i].match(type, *content, *length)) - { - log_variadic_message(LMT_INFO, _("%s is matching..."), _formats[i].name); - result = _formats[i].load(*content, *length); - } - - return result; - -} |