diff options
Diffstat (limited to 'src/arch/dalvik/operands/pool.c')
| -rw-r--r-- | src/arch/dalvik/operands/pool.c | 182 | 
1 files changed, 8 insertions, 174 deletions
| diff --git a/src/arch/dalvik/operands/pool.c b/src/arch/dalvik/operands/pool.c index d97c93b..055f58e 100644 --- a/src/arch/dalvik/operands/pool.c +++ b/src/arch/dalvik/operands/pool.c @@ -32,15 +32,11 @@  #include "../../operand-int.h" -#include "../../sharing/manager.h"  #include "../../../common/sort.h"  #include "../../../format/dex/pool.h" -/* --------------------- MANIPULATION D'OPERANDES INDIVIDUELLES --------------------- */ - -  /* Définition d'un opérande visant un élément de table de constantes Dalvik (instance) */  struct _GDalvikPoolOperand  { @@ -73,12 +69,6 @@ static void g_dalvik_pool_operand_dispose(GDalvikPoolOperand *);  /* Procède à la libération totale de la mémoire. */  static void g_dalvik_pool_operand_finalize(GDalvikPoolOperand *); -/* Initialise un nouvel objet partagé avec des informations. */ -static bool g_dalvik_pool_operand_apply_template(GDalvikPoolOperand *, const GDalvikPoolOperand *); - -/* Réalise une copie minimale d'un contenu partagé. */ -static void g_dalvik_pool_operand_define_template(const GDalvikPoolOperand *, GDalvikPoolOperand *); -  /* Compare un opérande avec un autre. */  static int g_dalvik_pool_operand_compare(const GDalvikPoolOperand *, const GDalvikPoolOperand *); @@ -87,23 +77,6 @@ static void g_dalvik_pool_operand_print(const GDalvikPoolOperand *, GBufferLine -/* -------------------------- PARTAGES DE CONTENUS UNIQUES -------------------------- */ - - -/* Gestionnaire des partages d'instances */ -static GShareManager *_dalvik_pool_operand_manager = NULL; - - -/* Fournit le gestionnaire de partages attribué à un type. */ -static GShareManager *get_dalvik_pool_operand_share_manager(void); - - - -/* ---------------------------------------------------------------------------------- */ -/*                       MANIPULATION D'OPERANDES INDIVIDUELLES                       */ -/* ---------------------------------------------------------------------------------- */ - -  /* Indique le type défini par la GLib pour un un élément de table de constantes Dalvik. */  G_DEFINE_TYPE(GDalvikPoolOperand, g_dalvik_pool_operand, G_TYPE_ARCH_OPERAND); @@ -132,12 +105,6 @@ static void g_dalvik_pool_operand_class_init(GDalvikPoolOperandClass *klass)      operand = G_ARCH_OPERAND_CLASS(klass); -    operand->get_manager = (get_operand_manager_fc)get_dalvik_pool_operand_share_manager; - -    operand->apply_template = (apply_operand_template_fc)g_dalvik_pool_operand_apply_template; -    operand->define_template = (define_operand_template_fc)g_dalvik_pool_operand_define_template; -    operand->free_template = (free_operand_template_fc)NULL; -      operand->compare = (operand_compare_fc)g_dalvik_pool_operand_compare;      operand->print = (operand_print_fc)g_dalvik_pool_operand_print; @@ -204,53 +171,6 @@ static void g_dalvik_pool_operand_finalize(GDalvikPoolOperand *operand)  /******************************************************************************  *                                                                             * -*  Paramètres  : operand  = objet partagé à initialiser.                      * -*                template = information à utiliser pour la mise en place.     * -*                                                                             * -*  Description : Initialise un nouvel objet partagé avec des informations.    * -*                                                                             * -*  Retour      : Bilan de l'opération.                                        * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -static bool g_dalvik_pool_operand_apply_template(GDalvikPoolOperand *operand, const GDalvikPoolOperand *template) -{ -    g_dalvik_pool_operand_define_template(template, operand); - -    g_object_ref(G_OBJECT(operand->format)); - -    return true; - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : operand  = objet partagé à consulter.                        * -*                template = informations à retrouver intégralement.           * -*                                                                             * -*  Description : Réalise une copie minimale d'un contenu partagé.             * -*                                                                             * -*  Retour      : -                                                            * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -static void g_dalvik_pool_operand_define_template(const GDalvikPoolOperand *operand, GDalvikPoolOperand *template) -{ -    template->format = operand->format; - -    template->type = operand->type; -    template->index = operand->index; - -} - - -/****************************************************************************** -*                                                                             *  *  Paramètres  : a = premier opérande à consulter.                            *  *                b = second opérande à consulter.                             *  *                                                                             * @@ -459,13 +379,10 @@ static void g_dalvik_pool_operand_print(const GDalvikPoolOperand *operand, GBuff  GArchOperand *g_dalvik_pool_operand_new(GDexFormat *format, DalvikPoolType type, const GBinContent *content, vmpa2t *pos, MemoryDataSize size, SourceEndian endian)  { -    GArchOperand *result;                   /* Structure à retourner       */ +    GDalvikPoolOperand *result;             /* Structure à retourner       */      uint8_t index8;                         /* Indice sur 8 bits           */      uint16_t index16;                       /* Indice sur 16 bits          */      bool test;                              /* Bilan de lecture            */ -    GDalvikPoolOperand fake;                /* Transport d'informations    */ - -    result = NULL;      switch (size)      { @@ -483,15 +400,17 @@ GArchOperand *g_dalvik_pool_operand_new(GDexFormat *format, DalvikPoolType type,      if (!test)          goto gdpon_exit; -    fake.format = format; -    fake.type = type; -    fake.index = (size == MDS_8_BITS ? index8 : index16); +    result = g_object_new(G_TYPE_DALVIK_POOL_OPERAND, NULL); + +    result->format = format; +    result->type = type; +    result->index = (size == MDS_8_BITS ? index8 : index16); -    result = G_ARCH_OPERAND(g_share_manager_build(_dalvik_pool_operand_manager, (GSharedInstance *)&fake)); +    return G_ARCH_OPERAND(result);   gdpon_exit: -    return result; +    return NULL;  } @@ -532,88 +451,3 @@ uint32_t g_dalvik_pool_operand_get_index(const GDalvikPoolOperand *operand)      return operand->index;  } - - - -/* ---------------------------------------------------------------------------------- */ -/*                            PARTAGES DE CONTENUS UNIQUES                            */ -/* ---------------------------------------------------------------------------------- */ - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : -                                                            * -*                                                                             * -*  Description : Fournit le gestionnaire de partages attribué à un type.      * -*                                                                             * -*  Retour      : Gestionnaire de partages en place.                           * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -static GShareManager *get_dalvik_pool_operand_share_manager(void) -{ -    return _dalvik_pool_operand_manager; - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : -                                                            * -*                                                                             * -*  Description : Met en place les mécanismes de partage des opérandes Dalvik. * -*                                                                             * -*  Retour      : Bilan de l'opération.                                        * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -bool init_dalvik_pool_operand_sharing(void) -{ -    _dalvik_pool_operand_manager = g_share_manager_new(G_TYPE_DALVIK_POOL_OPERAND); - -    return true; - -} - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : -                                                            * -*                                                                             * -*  Description : Imprime des statistiques quant aux partages dans l'archi.    * -*                                                                             * -*  Retour      : -                                                            * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ -#ifdef DEBUG_DUMP_STATS -void dump_dalvik_pool_operand_share_stats(void) -{ -    g_share_manager_dump_stats(_dalvik_pool_operand_manager); - -} -#endif - - -/****************************************************************************** -*                                                                             * -*  Paramètres  : -                                                            * -*                                                                             * -*  Description : Supprime les mécanismes de partage des opérandes Dalvik.     * -*                                                                             * -*  Retour      : -                                                            * -*                                                                             * -*  Remarques   : -                                                            * -*                                                                             * -******************************************************************************/ - -void exit_dalvik_pool_operand_sharing(void) -{ -    g_object_unref(G_OBJECT(_dalvik_pool_operand_manager)); - -} | 
