diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2013-06-30 13:01:38 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2013-06-30 13:01:38 (GMT) |
commit | e5314b83cf2521f4a1fee5d3cbb5011d7ac7bff7 (patch) | |
tree | 3af6d5b430d3a07753e273e9ddb1ff656e706661 /src/arch/arm/processor.c | |
parent | 0f3bbcb376ee4f76142ac4ddf729403fecac2641 (diff) |
Provided first basic support for a few ARM instructions.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@354 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
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; |