diff options
Diffstat (limited to 'src/arch/arm/processor.c')
-rw-r--r-- | src/arch/arm/processor.c | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/arch/arm/processor.c b/src/arch/arm/processor.c index 79a44fe..baf13ab 100644 --- a/src/arch/arm/processor.c +++ b/src/arch/arm/processor.c @@ -53,7 +53,7 @@ static void g_arm_processor_class_init(GArmProcessorClass *); static void g_arm_processor_init(GArmProcessor *); /* Décode une instruction dans un flux de données. */ -static GArchInstruction *g_arm_processor_decode_instruction(const GArmProcessor *, const bin_t *, off_t *, off_t, vmpa_t); +static GArchInstruction *g_arm_processor_decode_instruction(const GArmProcessor *, GProcContext *, const bin_t *, off_t *, off_t, vmpa_t, GBinFormat *); /* Indique le type défini par la GLib pour le processeur ARM. */ @@ -131,11 +131,13 @@ GArchProcessor *g_arm_processor_new(void) /****************************************************************************** * * -* Paramètres : proc = architecture visée par la procédure. * +* Paramètres : proc = architecture visée par la procédure. * +* ctx = contexte lié à l'exécution du processeur. * * data = flux de données à analyser. * * pos = position courante dans ce flux. [OUT] * * len = taille totale des données à analyser. * * addr = adresse virtuelle de l'instruction. * +* format = format du fichier contenant le code. * * * * Description : Décode une instruction dans un flux de données. * * * @@ -144,14 +146,28 @@ GArchProcessor *g_arm_processor_new(void) * Remarques : - * * * ******************************************************************************/ +#include "encoding.h" +extern GArchInstruction *try_to_decode_arm_v456_instr(bin_t *); -static GArchInstruction *g_arm_processor_decode_instruction(const GArmProcessor *proc, const bin_t *data, off_t *pos, off_t len, vmpa_t addr) +static GArchInstruction *g_arm_processor_decode_instruction(const GArmProcessor *proc, GProcContext *ctx, const bin_t *data, off_t *pos, off_t len, vmpa_t addr, GBinFormat *format) { GArchInstruction *result; /* Instruction à renvoyer */ - result = NULL; + uint32_t *instr; + if (data == NULL) + return NULL; + + + instr = (uint32_t *)(data + *pos); + + + //printf("[0x%08x] cond=%x\n", *instr, INSTR_TO_COND(*instr)); + + result = try_to_decode_arm_v456_instr(data + *pos); + + if (result != NULL) *pos += 4; return result; |