diff options
Diffstat (limited to 'plugins/dex/class.c')
-rw-r--r-- | plugins/dex/class.c | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/plugins/dex/class.c b/plugins/dex/class.c index 8a094d5..b5ec462 100644 --- a/plugins/dex/class.c +++ b/plugins/dex/class.c @@ -222,6 +222,7 @@ GDexClass *g_dex_class_new(GDexFormat *format, const class_def_item *def) uleb128_t index; /* Conservation du dernier id */ uleb128_t i; /* Boucle de parcours */ GDexField *field; /* Champ chargé */ + GDexPool *pool; /* Table de ressources */ GDataType *ctype; /* Type créé par la classe */ GBinFormat *base; /* Autre version du format */ GDexMethod *method; /* Méthode chargée */ @@ -291,7 +292,12 @@ GDexClass *g_dex_class_new(GDexFormat *format, const class_def_item *def) * Chargement des méthodes de classe. */ - ctype = get_type_from_dex_pool(format, def->class_idx); + pool = g_dex_format_get_pool(format); + + ctype = g_dex_pool_get_type_(pool, def->class_idx); + + g_object_unref(G_OBJECT(pool)); + if (ctype == NULL) goto gdcn_unknown_type; base = G_BIN_FORMAT(format); @@ -424,8 +430,13 @@ const class_data_item *g_dex_class_get_data(const GDexClass *class) GDataType *g_dex_class_get_class_type(const GDexClass *class) { GDataType *result; /* Type à renvoyer */ + GDexPool *pool; /* Table de ressources */ - result = get_type_from_dex_pool(class->format, class->definition.class_idx); + pool = g_dex_format_get_pool(class->format); + + result = g_dex_pool_get_type_(pool, class->definition.class_idx); + + g_object_unref(G_OBJECT(pool)); return result; @@ -447,8 +458,13 @@ GDataType *g_dex_class_get_class_type(const GDexClass *class) GDataType *g_dex_class_get_superclass_type(const GDexClass *class) { GDataType *result; /* Type à renvoyer */ + GDexPool *pool; /* Table de ressources */ + + pool = g_dex_format_get_pool(class->format); - result = get_type_from_dex_pool(class->format, class->definition.superclass_idx); + result = g_dex_pool_get_type_(pool, class->definition.superclass_idx); + + g_object_unref(G_OBJECT(pool)); return result; @@ -474,6 +490,7 @@ GDataType **g_dex_class_get_interface_types(const GDexClass *class, size_t *coun vmpa2t addr; /* Tête de lecture générique */ type_list interfaces; /* Liste des interfaces */ bool status; /* Bilan d'une lecture */ + GDexPool *pool; /* Table de ressources */ size_t i; /* Boucle de parcours */ if (class->definition.interfaces_off == 0) @@ -491,10 +508,14 @@ GDataType **g_dex_class_get_interface_types(const GDexClass *class, size_t *coun if (status) { *count = interfaces.size; - result = (GDataType **)malloc(*count * sizeof(GDataType *)); + result = malloc(*count * sizeof(GDataType *)); + + pool = g_dex_format_get_pool(class->format); for (i = 0; i < *count; i++) - result[i] = get_type_from_dex_pool(class->format, interfaces.list[i].type_idx); + result[i] = g_dex_pool_get_type_(pool, interfaces.list[i].type_idx); + + g_object_unref(G_OBJECT(pool)); } @@ -716,8 +737,13 @@ bool g_dex_method_get_offset(const GDexMethod *method, phys_t *offset) const char *g_dex_class_get_source_file(const GDexClass *class) { const char *result; /* Trouvaille à renvoyer */ + GDexPool *pool; /* Table de ressources */ + + pool = g_dex_format_get_pool(class->format); + + result = g_dex_pool_get_string(pool, class->definition.source_file_idx, NULL); - result = get_string_from_dex_pool(class->format, class->definition.source_file_idx, NULL); + g_object_unref(G_OBJECT(pool)); return result; |