diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2013-01-14 22:08:00 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2013-01-14 22:08:00 (GMT) |
commit | 2ab78407e9f73b6508afc281400a7c3fc018217f (patch) | |
tree | 437054ef874e9536e15b9254a6a8c4c2396604ff /src/arch/dalvik/context.c | |
parent | 35a6cd881528b5f77ce09476eccb39d02d9cc634 (diff) |
Cleaned the context used for decompilations.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@324 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
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; } |