diff options
| author | Cyrille Bagard <nocbos@gmail.com> | 2017-10-25 19:39:15 (GMT) | 
|---|---|---|
| committer | Cyrille Bagard <nocbos@gmail.com> | 2017-10-25 19:39:15 (GMT) | 
| commit | 8a4274cb6a99184ff4d9203c784ffd1e78550002 (patch) | |
| tree | ff3a3a5091b90e1cb1958924acf5119b115d656e /plugins | |
| parent | e6180b353a5177238b4e77946ff44505854e12f8 (diff) | |
Created a cache for Dalvik registers.
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/dalvik/core.c | 20 | ||||
| -rw-r--r-- | plugins/dalvik/core.h | 3 | ||||
| -rw-r--r-- | plugins/dalvik/register.c | 124 | ||||
| -rw-r--r-- | plugins/dalvik/register.h | 11 | ||||
| -rw-r--r-- | plugins/dex/core.c | 1 | ||||
| -rw-r--r-- | plugins/elf/core.c | 1 | ||||
| -rw-r--r-- | plugins/ropgadgets/plugin.c | 1 | 
7 files changed, 156 insertions, 5 deletions
| diff --git a/plugins/dalvik/core.c b/plugins/dalvik/core.c index f5b2f91..7f0c79f 100644 --- a/plugins/dalvik/core.c +++ b/plugins/dalvik/core.c @@ -29,6 +29,7 @@  #include "processor.h" +#include "register.h" @@ -40,7 +41,6 @@ DEFINE_CHRYSALIDE_PLUGIN("dalvik", "Add suport for the Dalvik architecture", "0.  /******************************************************************************  *                                                                             *  *  Paramètres  : plugin = greffon à manipuler.                                * -*                ref    = espace de référencement global.                     *  *                                                                             *  *  Description : Prend acte du chargement du greffon.                         *  *                                                                             * @@ -60,3 +60,21 @@ G_MODULE_EXPORT bool chrysalide_plugin_init(GPluginModule *plugin)      return result;  } + +/****************************************************************************** +*                                                                             * +*  Paramètres  : plugin = greffon à manipuler.                                * +*                                                                             * +*  Description : Prend acte du déchargement du greffon.                       * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +G_MODULE_EXPORT void chrysalide_plugin_exit(GPluginModule *plugin) +{ +    clean_dalvik_register_cache(); + +} diff --git a/plugins/dalvik/core.h b/plugins/dalvik/core.h index e72abaa..08717a9 100644 --- a/plugins/dalvik/core.h +++ b/plugins/dalvik/core.h @@ -33,6 +33,9 @@  /* Prend acte du chargement du greffon. */  G_MODULE_EXPORT bool chrysalide_plugin_init(GPluginModule *); +/* Prend acte du déchargement du greffon. */ +G_MODULE_EXPORT void chrysalide_plugin_exit(GPluginModule *); +  #endif  /* _PLUGINS_DALVIK_CORE_H */ diff --git a/plugins/dalvik/register.c b/plugins/dalvik/register.c index 00e9757..2e7b7c6 100644 --- a/plugins/dalvik/register.c +++ b/plugins/dalvik/register.c @@ -24,6 +24,7 @@  #include "register.h" +#include <malloc.h>  #include <stdio.h> @@ -32,6 +33,9 @@ +/* ------------------------- GESTION UNITAIRE DES REGISTRES ------------------------- */ + +  /* Représentation d'un registre Dalvik (instance) */  struct _GDalvikRegister  { @@ -71,6 +75,27 @@ static guint g_dalvik_register_hash(const GDalvikRegister *);  /* Traduit un registre en version humainement lisible. */  static void g_dalvik_register_print(const GDalvikRegister *, GBufferLine *, AsmSyntax); +/* Crée une réprésentation de registre Dalvik. */ +GDalvikRegister *_g_dalvik_register_new(uint16_t); + + + +/* ------------------------ GESTION SOUS FORME DE SINGLETONS ------------------------ */ + + +/* Conservation des registres utilisés */ +static GDalvikRegister **_dalvik_registers = NULL; +static uint16_t _dreg_count = 0; + + +/* Fournit le singleton associé à un registre Dalvik. */ +static GDalvikRegister *get_dalvik_register(uint16_t); + + + +/* ---------------------------------------------------------------------------------- */ +/*                           GESTION UNITAIRE DES REGISTRES                           */ +/* ---------------------------------------------------------------------------------- */  /* Indique le type défini pour une représentation d'un registre Dalvik. */ @@ -235,7 +260,7 @@ static void g_dalvik_register_print(const GDalvikRegister *reg, GBufferLine *lin  *                                                                             *  ******************************************************************************/ -GDalvikRegister *g_dalvik_register_new(uint16_t index) +GDalvikRegister *_g_dalvik_register_new(uint16_t index)  {      GDalvikRegister *result;                /* Structure à retourner       */ @@ -250,6 +275,29 @@ GDalvikRegister *g_dalvik_register_new(uint16_t index)  /******************************************************************************  *                                                                             * +*  Paramètres  : index = indice du registre correspondant.                    * +*                                                                             * +*  Description : Crée une réprésentation de registre Dalvik.                  * +*                                                                             * +*  Retour      : Adresse de la structure mise en place.                       * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +GDalvikRegister *g_dalvik_register_new(uint16_t index) +{ +    GDalvikRegister *result;                /* Structure à retourner       */ + +    result = get_dalvik_register(index); + +    return result; + +} + + +/****************************************************************************** +*                                                                             *  *  Paramètres  : reg = registre à consulter.                                  *  *                                                                             *  *  Description : Fournit l'indice d'un registre Dalvik.                       * @@ -289,3 +337,77 @@ int g_dalvik_register_compare(const GDalvikRegister *a, const GDalvikRegister *b      return result;  } + + + +/* ---------------------------------------------------------------------------------- */ +/*                          GESTION SOUS FORME DE SINGLETONS                          */ +/* ---------------------------------------------------------------------------------- */ + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : index = indice du registre correspondant.                    * +*                                                                             * +*  Description : Fournit le singleton associé à un registre Dalvik.           * +*                                                                             * +*  Retour      : Adresse de la structure mise en place.                       * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static GDalvikRegister *get_dalvik_register(uint16_t index) +{ +    GDalvikRegister *result;                /* Structure à retourner       */ +    uint16_t i;                             /* Boucle de parcours          */ + +    if (index >= _dreg_count) +    { +        _dalvik_registers = realloc(_dalvik_registers, (index + 1) * sizeof(GDalvikRegister *)); + +        for (i = _dreg_count; i < (index + 1); i++) +            _dalvik_registers[i] = NULL; + +        _dreg_count = index + 1; + +    } + +    if (_dalvik_registers[index] == NULL) +        _dalvik_registers[index] = _g_dalvik_register_new(index); + +    result = _dalvik_registers[index]; + +    g_object_ref(G_OBJECT(result)); + +    return result; + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : -                                                            * +*                                                                             * +*  Description : Vide totalement le cache des registres Dalvik.               * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +void clean_dalvik_register_cache(void) +{ +    uint16_t i;                             /* Boucle de parcours          */ + +    for (i = 0; i < _dreg_count; i++) +        g_object_unref(G_OBJECT(_dalvik_registers[i])); + +    if (_dalvik_registers != NULL) +        free(_dalvik_registers); + +    _dalvik_registers = NULL; +    _dreg_count = 0; + +} diff --git a/plugins/dalvik/register.h b/plugins/dalvik/register.h index 460edd7..de5efe5 100644 --- a/plugins/dalvik/register.h +++ b/plugins/dalvik/register.h @@ -33,6 +33,9 @@ +/* ------------------------- GESTION UNITAIRE DES REGISTRES ------------------------- */ + +  #define G_TYPE_DALVIK_REGISTER               g_dalvik_register_get_type()  #define G_DALVIK_REGISTER(obj)               (G_TYPE_CHECK_INSTANCE_CAST((obj), g_dalvik_register_get_type(), GDalvikRegister))  #define G_IS_DALVIK_REGISTER(obj)            (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_dalvik_register_get_type())) @@ -62,4 +65,12 @@ int g_dalvik_register_compare(const GDalvikRegister *, const GDalvikRegister *); +/* ------------------------ GESTION SOUS FORME DE SINGLETONS ------------------------ */ + + +/* Vide totalement le cache des registres Dalvik. */ +void clean_dalvik_register_cache(void); + + +  #endif  /* _ARCH_DALVIK_REGISTERS_H */ diff --git a/plugins/dex/core.c b/plugins/dex/core.c index 8846c51..b163be9 100644 --- a/plugins/dex/core.c +++ b/plugins/dex/core.c @@ -41,7 +41,6 @@ DEFINE_CHRYSALIDE_PLUGIN("dex", "Add suport for the DEX format", "0.1.0",  /******************************************************************************  *                                                                             *  *  Paramètres  : plugin = greffon à manipuler.                                * -*                ref    = espace de référencement global.                     *  *                                                                             *  *  Description : Prend acte du chargement du greffon.                         *  *                                                                             * diff --git a/plugins/elf/core.c b/plugins/elf/core.c index ebd980e..a12a8a6 100644 --- a/plugins/elf/core.c +++ b/plugins/elf/core.c @@ -41,7 +41,6 @@ DEFINE_CHRYSALIDE_PLUGIN("elf", "Add suport for the ELF format", "0.1.0",  /******************************************************************************  *                                                                             *  *  Paramètres  : plugin = greffon à manipuler.                                * -*                ref    = espace de référencement global.                     *  *                                                                             *  *  Description : Prend acte du chargement du greffon.                         *  *                                                                             * diff --git a/plugins/ropgadgets/plugin.c b/plugins/ropgadgets/plugin.c index 11d1715..85ae6dd 100644 --- a/plugins/ropgadgets/plugin.c +++ b/plugins/ropgadgets/plugin.c @@ -49,7 +49,6 @@ static void mcb_plugins_list_rop_gadgets(GtkMenuItem *, gpointer);  /******************************************************************************  *                                                                             *  *  Paramètres  : plugin = greffon à manipuler.                                * -*                ref    = espace de référencement global.                     *  *                                                                             *  *  Description : Prend acte du chargement du greffon.                         *  *                                                                             * | 
