diff options
Diffstat (limited to 'src/arch/arm/processor.c')
| -rw-r--r-- | src/arch/arm/processor.c | 119 | 
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; - -}  | 
