summaryrefslogtreecommitdiff
path: root/src/arch/arm/processor.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/arm/processor.c')
-rw-r--r--src/arch/arm/processor.c119
1 files changed, 9 insertions, 110 deletions
diff --git a/src/arch/arm/processor.c b/src/arch/arm/processor.c
index 4bd342f..2c676be 100644
--- a/src/arch/arm/processor.c
+++ b/src/arch/arm/processor.c
@@ -2,7 +2,7 @@
/* Chrysalide - Outil d'analyse de fichiers binaires
* processor.c - manipulation du processeur ARM
*
- * Copyright (C) 2010-2013 Cyrille Bagard
+ * Copyright (C) 2014 Cyrille Bagard
*
* This file is part of Chrysalide.
*
@@ -24,32 +24,14 @@
#include "processor.h"
-//#include "instruction.h"
-//#include "opcodes.h"
-#include "../processor-int.h"
+#include "processor-int.h"
-/* Définition du processeur ARM (instance) */
-struct _GArmProcessor
-{
- GArchProcessor parent; /* Instance parente */
-
-};
-
-
-/* Définition du processeur ARM (classe) */
-struct _GArmProcessorClass
-{
- GArchProcessorClass parent; /* Classe parente */
-
-};
-
-
-/* Initialise la classe des processeurs ARM. */
+/* Initialise la classe des registres ARM. */
static void g_arm_processor_class_init(GArmProcessorClass *);
-/* Initialise une instance de processeur ARM. */
+/* Initialise une instance de registre ARM. */
static void g_arm_processor_init(GArmProcessor *);
/* Supprime toutes les références externes. */
@@ -58,15 +40,12 @@ static void g_arm_processor_dispose(GArmProcessor *);
/* Procède à la libération totale de la mémoire. */
static void g_arm_processor_finalize(GArmProcessor *);
-/* Décode une instruction dans un flux de données. */
-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. */
G_DEFINE_TYPE(GArmProcessor, g_arm_processor, G_TYPE_ARCH_PROCESSOR);
-
/******************************************************************************
* *
* Paramètres : klass = classe à initialiser. *
@@ -81,17 +60,12 @@ G_DEFINE_TYPE(GArmProcessor, g_arm_processor, G_TYPE_ARCH_PROCESSOR);
static void g_arm_processor_class_init(GArmProcessorClass *klass)
{
- GObjectClass *object; /* Autre version de la classe */
- GArchProcessorClass *proc; /* Encore une autre vision... */
-
- object = G_OBJECT_CLASS(klass);
-
- object->dispose = (GObjectFinalizeFunc/* ! */)g_arm_processor_dispose;
- object->finalize = (GObjectFinalizeFunc)g_arm_processor_finalize;
+ GObjectClass *object_class; /* Autre version de la classe */
- proc = G_ARCH_PROCESSOR_CLASS(klass);
+ object_class = G_OBJECT_CLASS(klass);
- proc->decode = (decode_instruction_fc)g_arm_processor_decode_instruction;
+ object_class->dispose = (GObjectFinalizeFunc/* ! */)g_arm_processor_dispose;
+ object_class->finalize = (GObjectFinalizeFunc)g_arm_processor_finalize;
}
@@ -110,13 +84,6 @@ static void g_arm_processor_class_init(GArmProcessorClass *klass)
static void g_arm_processor_init(GArmProcessor *proc)
{
- GArchProcessor *parent; /* Instance parente */
-
- parent = G_ARCH_PROCESSOR(proc);
-
- parent->endianness = SRE_LITTLE;
- parent->memsize = MDS_32_BITS;
- parent->inssize = MDS_32_BITS;
}
@@ -142,7 +109,7 @@ static void g_arm_processor_dispose(GArmProcessor *proc)
/******************************************************************************
* *
-* Paramètres : bookmark = instance d'objet GLib à traiter. *
+* Paramètres : proc = instance d'objet GLib à traiter. *
* *
* Description : Procède à la libération totale de la mémoire. *
* *
@@ -157,71 +124,3 @@ static void g_arm_processor_finalize(GArmProcessor *proc)
G_OBJECT_CLASS(g_arm_processor_parent_class)->finalize(G_OBJECT(proc));
}
-
-
-/******************************************************************************
-* *
-* Paramètres : - *
-* *
-* Description : Crée le support de l'architecture ARM. *
-* *
-* Retour : Architecture mise en place. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GArchProcessor *g_arm_processor_new(void)
-{
- GArchProcessor *result; /* Structure à retourner */
-
- result = g_object_new(G_TYPE_ARM_PROCESSOR, NULL);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* 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] *
-* end = limite 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. *
-* *
-* Retour : Instruction mise en place. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-#include "encoding.h"
-extern GArchInstruction *try_to_decode_arm_v456_instr(bin_t *);
-
-static GArchInstruction *g_arm_processor_decode_instruction(const GArmProcessor *proc, GProcContext *ctx, const bin_t *data, off_t *pos, off_t end, vmpa_t addr, GBinFormat *format)
-{
- GArchInstruction *result; /* Instruction à renvoyer */
-
-
- 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;
-
-}