diff options
Diffstat (limited to 'src/arch/dalvik/operands')
-rw-r--r-- | src/arch/dalvik/operands/pool.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/arch/dalvik/operands/pool.c b/src/arch/dalvik/operands/pool.c index 0d88242..7de8c37 100644 --- a/src/arch/dalvik/operands/pool.c +++ b/src/arch/dalvik/operands/pool.c @@ -237,6 +237,7 @@ static void g_dalvik_pool_operand_print(const GDalvikPoolOperand *operand, GBuff size_t len; /* Taille du texte à créer */ char *tmp; /* Chaîne de caractères #2 */ GBinVariable *field; /* Champ à représenter */ + GDexMethod *method; /* Méthode à retrouver */ GBinRoutine *routine; /* Routine à représenter */ switch (operand->type) @@ -246,6 +247,7 @@ static void g_dalvik_pool_operand_print(const GDalvikPoolOperand *operand, GBuff break; case DPT_STRING: + string = get_string_from_dex_pool(operand->format, operand->index); if (string != NULL) @@ -269,6 +271,7 @@ static void g_dalvik_pool_operand_print(const GDalvikPoolOperand *operand, GBuff break; case DPT_TYPE: + type = get_type_from_dex_pool(operand->format, operand->index); if (type != NULL) @@ -300,6 +303,7 @@ static void g_dalvik_pool_operand_print(const GDalvikPoolOperand *operand, GBuff break; case DPT_FIELD: + field = get_field_from_dex_pool(operand->format, operand->index); if (field != NULL) @@ -327,7 +331,13 @@ static void g_dalvik_pool_operand_print(const GDalvikPoolOperand *operand, GBuff break; case DPT_METHOD: - routine = NULL;//get_routine_from_dex_pool(operand->format, operand->index); + + method = get_method_from_dex_pool(operand->format, operand->index); + + if (method != NULL) + routine = g_dex_method_get_routine(method); + else + routine = NULL; if (routine != NULL) { @@ -351,6 +361,9 @@ static void g_dalvik_pool_operand_print(const GDalvikPoolOperand *operand, GBuff free(tmp); + if (method != NULL) + g_object_unref(G_OBJECT(method)); + break; } |