summaryrefslogtreecommitdiff
path: root/plugins/dalvik/v35/instruction.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/dalvik/v35/instruction.c')
-rw-r--r--plugins/dalvik/v35/instruction.c49
1 files changed, 46 insertions, 3 deletions
diff --git a/plugins/dalvik/v35/instruction.c b/plugins/dalvik/v35/instruction.c
index 437cae8..1966690 100644
--- a/plugins/dalvik/v35/instruction.c
+++ b/plugins/dalvik/v35/instruction.c
@@ -28,6 +28,7 @@
#include "opcodes/descriptions.h"
+#include "opcodes/hooks.h"
#include "opcodes/keywords.h"
#include "../instruction-int.h"
@@ -66,6 +67,9 @@ static const char *g_dalvik35_instruction_get_encoding(const GDalvik35Instructio
/* Fournit le nom humain de l'instruction manipulée. */
static const char *g_dalvik35_instruction_get_keyword(const GDalvik35Instruction *, AsmSyntax);
+/* Complète un désassemblage accompli pour une instruction. */
+static void g_dalvik35_instruction_call_hook(GDalvik35Instruction *, InstrProcessHook, GArchProcessor *, GProcContext *, GExeFormat *);
+
/* Fournit une description pour l'instruction manipulée. */
static const char *g_dalvik35_instruction_get_description(const GDalvik35Instruction *);
@@ -101,6 +105,7 @@ static void g_dalvik35_instruction_class_init(GDalvik35InstructionClass *klass)
instr->get_encoding = (get_instruction_encoding_fc)g_dalvik35_instruction_get_encoding;
instr->get_keyword = (get_instruction_keyword_fc)g_dalvik35_instruction_get_keyword;
+ instr->call_hook = (call_instruction_hook_fc)g_dalvik35_instruction_call_hook;
instr->get_desc = (get_instruction_desc_fc)g_dalvik35_instruction_get_description;
}
@@ -164,7 +169,7 @@ static void g_dalvik35_instruction_finalize(GDalvik35Instruction *instr)
/******************************************************************************
* *
-* Paramètres : keyword = définition du nom humaine de l'instruction. *
+* Paramètres : uid = identifiant unique attribué à l'instruction. *
* *
* Description : Crée une instruction pour l'architecture Dalvik v35. *
* *
@@ -176,13 +181,13 @@ static void g_dalvik35_instruction_finalize(GDalvik35Instruction *instr)
GArchInstruction *g_dalvik35_instruction_new(itid_t uid)
{
- GArchInstruction *result; /* Structure à retourner */
+ GDalvik35Instruction *result; /* Structure à retourner */
result = g_object_new(G_TYPE_DALVIK35_INSTRUCTION, NULL);
G_ARCH_INSTRUCTION(result)->uid = uid;
- return result;
+ return G_ARCH_INSTRUCTION(result);
}
@@ -241,6 +246,44 @@ static const char *g_dalvik35_instruction_get_keyword(const GDalvik35Instruction
/******************************************************************************
* *
+* Paramètres : instr = instruction quelconque à traiter. *
+* type = type de procédure à utiliser. *
+* proc = représentation de l'architecture utilisée. *
+* context = contexte associé à la phase de désassemblage. *
+* format = accès aux données du binaire d'origine. *
+* *
+* Description : Complète un désassemblage accompli pour une instruction. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void g_dalvik35_instruction_call_hook(GDalvik35Instruction *instr, InstrProcessHook type, GArchProcessor *proc, GProcContext *context, GExeFormat *format)
+{
+ GArchInstruction *base; /* Version de base d'instance */
+ itid_t uid; /* Accès simplifié */
+ instr_hook_fc hook; /* Décrochage à appeler */
+
+ assert(type < IPH_COUNT);
+
+ base = G_ARCH_INSTRUCTION(instr);
+
+ uid = base->uid;
+
+ assert(uid < DOP35_COUNT);
+
+ hook = _dalvik35_hooks[uid][type];
+
+ if (hook != NULL)
+ hook(base, proc, context, format);
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : instr = instruction d'assemblage à consulter. *
* *
* Description : Fournit une description pour l'instruction manipulée. *