diff options
Diffstat (limited to 'src/arch/dalvik/context.c')
| -rw-r--r-- | src/arch/dalvik/context.c | 67 | 
1 files changed, 59 insertions, 8 deletions
| diff --git a/src/arch/dalvik/context.c b/src/arch/dalvik/context.c index e5041cb..f1af7e9 100644 --- a/src/arch/dalvik/context.c +++ b/src/arch/dalvik/context.c @@ -114,6 +114,12 @@ static void g_dalvik_dcontext_class_init(GDalvikDContextClass *);  /* Initialise une instance de contexte de décompilation Dalkvik. */  static void g_dalvik_dcontext_init(GDalvikDContext *); +/* Supprime toutes les références externes. */ +static void g_dalvik_dcontext_dispose(GDalvikDContext *); + +/* Procède à la libération totale de la mémoire. */ +static void g_dalvik_dcontext_finalize(GDalvikDContext *); +  /* Convertit un registre machine en un pseudo-registre. */  static GDecInstruction *g_dalvik_dcontext_convert_register(GDalvikDContext *, GDalvikRegisterOperand *, bool); @@ -282,7 +288,7 @@ G_DEFINE_TYPE(GDalvikDContext, g_dalvik_dcontext, G_TYPE_DEC_CONTEXT);  /******************************************************************************  *                                                                             * -*  Paramètres  : klass = classe à initialiser.                                * +*  Paramètres  : class = classe à initialiser.                                *  *                                                                             *  *  Description : Initialise la classe des contextes de décompilation Dalkvik. *  *                                                                             * @@ -292,8 +298,14 @@ G_DEFINE_TYPE(GDalvikDContext, g_dalvik_dcontext, G_TYPE_DEC_CONTEXT);  *                                                                             *  ******************************************************************************/ -static void g_dalvik_dcontext_class_init(GDalvikDContextClass *klass) +static void g_dalvik_dcontext_class_init(GDalvikDContextClass *class)  { +    GObjectClass *object;                   /* Autre version de la classe  */ + +    object = G_OBJECT_CLASS(class); + +    object->dispose = (GObjectFinalizeFunc/* ! */)g_dalvik_dcontext_dispose; +    object->finalize = (GObjectFinalizeFunc)g_dalvik_dcontext_finalize;  } @@ -326,6 +338,47 @@ static void g_dalvik_dcontext_init(GDalvikDContext *ctx)  /******************************************************************************  *                                                                             * +*  Paramètres  : ctx = instance d'objet GLib à traiter.                       * +*                                                                             * +*  Description : Supprime toutes les références externes.                     * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static void g_dalvik_dcontext_dispose(GDalvikDContext *ctx) +{ +    if (ctx->this != NULL) +        g_object_unref(G_OBJECT(ctx->this)); + +    G_OBJECT_CLASS(g_dalvik_dcontext_parent_class)->dispose(G_OBJECT(ctx)); + +} + + +/****************************************************************************** +*                                                                             * +*  Paramètres  : ctx = instance d'objet GLib à traiter.                       * +*                                                                             * +*  Description : Procède à la libération totale de la mémoire.                * +*                                                                             * +*  Retour      : -                                                            * +*                                                                             * +*  Remarques   : -                                                            * +*                                                                             * +******************************************************************************/ + +static void g_dalvik_dcontext_finalize(GDalvikDContext *ctx) +{ +    G_OBJECT_CLASS(g_dalvik_dcontext_parent_class)->finalize(G_OBJECT(ctx)); + +} + + +/****************************************************************************** +*                                                                             *  *  Paramètres  : -                                                            *  *                                                                             *  *  Description : Crée un contexte pour la décompilation Dalvik.               * @@ -373,8 +426,8 @@ static GDecInstruction *g_dalvik_dcontext_convert_register(GDalvikDContext *ctx,      GBinVariable *this;                     /* Définition de "this"        */      gpointer *found;                        /* Pseudo-registre trouvé      */ -    format = G_DEX_FORMAT(g_object_get_data(G_OBJECT(ctx), "format")); -    routine = G_BIN_ROUTINE(g_object_get_data(G_OBJECT(ctx), "routine")); +    format = G_DEX_FORMAT(G_DEC_CONTEXT(ctx)->format); +    routine = G_DEC_CONTEXT(ctx)->routine;      method = g_dex_format_find_method_by_address(format, g_binary_routine_get_address(routine)); @@ -386,10 +439,7 @@ static GDecInstruction *g_dalvik_dcontext_convert_register(GDalvikDContext *ctx,      /* Objet "this" */      if (info & DVI_THIS)      { -        if (ctx->this != NULL) -            g_object_ref(G_OBJECT(ctx->this)); - -        else +        if (ctx->this == NULL)          {              this = g_binary_variable_new(/* FIXME */g_basic_type_new(BTP_OTHER) /* FIXME */);              g_binary_variable_set_name(this, "this"); @@ -399,6 +449,7 @@ static GDecInstruction *g_dalvik_dcontext_convert_register(GDalvikDContext *ctx,          } +        g_object_ref(G_OBJECT(ctx->this));          result = ctx->this;      } | 
