diff options
Diffstat (limited to 'src/format')
| -rwxr-xr-x | src/format/dex/dex.c | 2 | ||||
| -rw-r--r-- | src/format/format.c | 54 | ||||
| -rw-r--r-- | src/format/format.h | 2 | 
3 files changed, 51 insertions, 7 deletions
| diff --git a/src/format/dex/dex.c b/src/format/dex/dex.c index 174bd2b..287c9ea 100755 --- a/src/format/dex/dex.c +++ b/src/format/dex/dex.c @@ -224,6 +224,8 @@ static void g_dex_format_find_all_sources(GDexFormat *format)      bf = G_BIN_FORMAT(format); +    return; /* FIXME */ +      for (i = 0; i < format->classes_count; i++)      {          source = g_dex_class_get_source_file(format->classes[i], format); diff --git a/src/format/format.c b/src/format/format.c index 053a7aa..8e1d864 100644 --- a/src/format/format.c +++ b/src/format/format.c @@ -35,6 +35,7 @@  #include "pe/pe.h"  #include "../decomp/expr/block.h"  #include "../panels/log.h" +#include "../plugins/pglist.h" @@ -497,9 +498,10 @@ bool init_all_formats(void)  /******************************************************************************  *                                                                             * -*  Paramètres  : type    = type de format recherché.                          * -*                content = contenu binaire à parcourir.                       * -*                length  = taille du contenu en question.                     * +*  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.                *  *                                                                             * @@ -509,22 +511,62 @@ bool init_all_formats(void)  *                                                                             *  ******************************************************************************/ -GBinFormat *load_new_format(FormatType type, const uint8_t *content, off_t length) +GBinFormat *load_new_format(FormatType type, char *filename, bin_t **content, off_t *length)  {      GBinFormat *result;                     /* Adresse à retourner         */ +    GPluginModule **pglist;                 /* Liste de greffons           */ +    size_t pgcount;                         /* Taille de cette liste       */      size_t i;                               /* Boucle de parcours          */      result = NULL; +    printf("analysing... %s\n", filename); + + + +    pglist = get_all_plugins_for_action(PGA_FORMAT_MATCHER, &pgcount); + +    if (pgcount > 0) +    { + lnf_rescan: + +        for (i = 0; i < pgcount; i++) +            switch (g_plugin_module_is_matching(pglist[i], &filename, content, length)) +            { +                case MFA_MATCHED: +                    /* FIXME */ +                    break; + +                case MFA_RELOAD: +                    //goto lnf_rescan; +                    break; + +                default: +                    break; + +            } + +        free(pglist); + +    } + + +      for (i = 0; i < FID_COUNT && result == NULL; i++) -        if (_formats[i].type == type && _formats[i].match(type, content, length)) +        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); +            result = _formats[i].load(*content, *length);          } + + +    printf("FINAL FORMAT :: %p\n", result); + +    //exit(0); +      return result;  } diff --git a/src/format/format.h b/src/format/format.h index dd05dd2..7f0b649 100644 --- a/src/format/format.h +++ b/src/format/format.h @@ -121,7 +121,7 @@ typedef GBinFormat * (* format_load_fc) (const bin_t *, off_t);  bool init_all_formats(void);  /* Charge si possible un nouveau format binaire. */ -GBinFormat *load_new_format(FormatType, const uint8_t *, off_t); +GBinFormat *load_new_format(FormatType, char *filename, bin_t **, off_t *); | 
