summaryrefslogtreecommitdiff
path: root/src/arch/arm/processor.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2013-06-30 13:01:38 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2013-06-30 13:01:38 (GMT)
commite5314b83cf2521f4a1fee5d3cbb5011d7ac7bff7 (patch)
tree3af6d5b430d3a07753e273e9ddb1ff656e706661 /src/arch/arm/processor.c
parent0f3bbcb376ee4f76142ac4ddf729403fecac2641 (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.c24
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;