diff options
Diffstat (limited to 'src/arch/arm/v7/processor.c')
-rw-r--r-- | src/arch/arm/v7/processor.c | 295 |
1 files changed, 0 insertions, 295 deletions
diff --git a/src/arch/arm/v7/processor.c b/src/arch/arm/v7/processor.c deleted file mode 100644 index b310652..0000000 --- a/src/arch/arm/v7/processor.c +++ /dev/null @@ -1,295 +0,0 @@ - -/* Chrysalide - Outil d'analyse de fichiers binaires - * processor.c - manipulation du processeur ARMv7 - * - * Copyright (C) 2014-2017 Cyrille Bagard - * - * This file is part of Chrysalide. - * - * Chrysalide is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * Chrysalide is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Foobar. If not, see <http://www.gnu.org/licenses/>. - */ - - -#include "processor.h" - - -#include <assert.h> - - -#include "arm.h" -#include "context.h" -#include "thumb_16.h" -#include "thumb_32.h" -#include "../processor-int.h" -#include "../../raw.h" - - - -/* Définition du processeur ARMv7 (instance) */ -struct _GArmV7Processor -{ - GArmProcessor parent; /* Instance parente */ - -}; - - -/* Définition du processeur ARMv7 (classe) */ -struct _GArmV7ProcessorClass -{ - GArmProcessorClass parent; /* Classe parente */ - -}; - - -/* Initialise la classe des registres ARMv7. */ -static void g_armv7_processor_class_init(GArmV7ProcessorClass *); - -/* Initialise une instance de registre ARMv7. */ -static void g_armv7_processor_init(GArmV7Processor *); - -/* Supprime toutes les références externes. */ -static void g_armv7_processor_dispose(GArmV7Processor *); - -/* Procède à la libération totale de la mémoire. */ -static void g_armv7_processor_finalize(GArmV7Processor *); - -/* Fournit un contexte pour l'exécution du processeur ARM. */ -static GArmV7Context *g_armv7_processor_get_context(const GArmV7Processor *); - -/* Décode une instruction dans un flux de données. */ -static GArchInstruction *g_armv7_processor_disassemble(const GArmV7Processor *, GArmV7Context *, const GBinContent *, vmpa2t *, GExeFormat *); - - - -/* Indique le type défini par la GLib pour le processeur ARMv7. */ -G_DEFINE_TYPE(GArmV7Processor, g_armv7_processor, G_TYPE_ARM_PROCESSOR); - - -/****************************************************************************** -* * -* Paramètres : klass = classe à initialiser. * -* * -* Description : Initialise la classe des processeurs ARMv7. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void g_armv7_processor_class_init(GArmV7ProcessorClass *klass) -{ - GObjectClass *object_class; /* Autre version de la classe */ - GArchProcessorClass *proc; /* Encore une autre vision... */ - - object_class = G_OBJECT_CLASS(klass); - proc = G_ARCH_PROCESSOR_CLASS(klass); - - object_class->dispose = (GObjectFinalizeFunc/* ! */)g_armv7_processor_dispose; - object_class->finalize = (GObjectFinalizeFunc)g_armv7_processor_finalize; - - proc->disassemble = (disass_instr_fc)g_armv7_processor_disassemble; - -} - - -/****************************************************************************** -* * -* Paramètres : proc = instance à initialiser. * -* * -* Description : Initialise une instance de processeur ARMv7. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void g_armv7_processor_init(GArmV7Processor *proc) -{ - - GArchProcessor *parent; /* Instance parente */ - - parent = G_ARCH_PROCESSOR(proc); - - parent->endianness = SRE_LITTLE; - parent->memsize = MDS_32_BITS; - parent->inssize = MDS_32_BITS; - - - - - parent->get_ctx = (get_processor_context_fc)g_armv7_processor_get_context; - - -} - - -/****************************************************************************** -* * -* Paramètres : proc = instance d'objet GLib à traiter. * -* * -* Description : Supprime toutes les références externes. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void g_armv7_processor_dispose(GArmV7Processor *proc) -{ - G_OBJECT_CLASS(g_armv7_processor_parent_class)->dispose(G_OBJECT(proc)); - -} - - -/****************************************************************************** -* * -* Paramètres : proc = instance d'objet GLib à traiter. * -* * -* Description : Procède à la libération totale de la mémoire. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void g_armv7_processor_finalize(GArmV7Processor *proc) -{ - G_OBJECT_CLASS(g_armv7_processor_parent_class)->finalize(G_OBJECT(proc)); - -} - - -/****************************************************************************** -* * -* Paramètres : - * -* * -* Description : Crée le support de l'architecture ARMv7. * -* * -* Retour : Adresse de la structure mise en place. * -* * -* Remarques : - * -* * -******************************************************************************/ - -GArmV7Processor *g_armv7_processor_new(void) -{ - GArmV7Processor *result; /* Structure à retourner */ - - result = g_object_new(G_TYPE_ARMV7_PROCESSOR, NULL); - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : proc = architecture, spectatrice ici. * -* * -* Description : Fournit un contexte pour l'exécution du processeur Arm. * -* * -* Retour : Contexte mis en place. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static GArmV7Context *g_armv7_processor_get_context(const GArmV7Processor *proc) -{ - return g_armv7_context_new(); - -} - - -/****************************************************************************** -* * -* Paramètres : proc = architecture visée par la procédure. * -* ctx = contexte lié à l'exécution du processeur. * -* content = flux de données à analyser. * -* pos = position courante dans ce flux. [OUT] * -* format = format du fichier contenant le code. * -* * -* Description : Désassemble une instruction dans un flux de données. * -* * -* Retour : Instruction mise en place ou NULL en cas d'échec. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static GArchInstruction *g_armv7_processor_disassemble(const GArmV7Processor *proc, GArmV7Context *ctx, const GBinContent *content, vmpa2t *pos, GExeFormat *format) -{ - GArchInstruction *result; /* Instruction à renvoyer */ - SourceEndian endian; /* Boutisme des données lues */ - uint16_t raw16; /* Donnée 16 bits à analyser */ - uint32_t raw32; /* Donnée 32 bits à analyser */ - ArmV7InstrSet iset; /* Type de jeu d'instructions */ - - endian = G_ARCH_PROCESSOR(proc)->endianness; - - iset = g_armv7_context_find_encoding(ctx, get_virt_addr(pos)); - - switch (iset) - { - case AV7IS_ARM: - - if (!g_binary_content_read_u32(content, pos, endian, &raw32)) - return NULL; - - result = process_armv7_arm_instruction_set_encoding(raw32); - - break; - - case AV7IS_THUMB: - - if (!g_binary_content_read_u16(content, pos, endian, &raw16)) - return NULL; - - switch (raw16 >> 11) - { - case 0b11101: - case 0b11110: - case 0b11111: - - raw32 = raw16 << 16; - - if (!g_binary_content_read_u16(content, pos, endian, &raw16)) - return NULL; - - raw32 |= raw16; - - result = process_armv7_thumb_32_instruction_set_encoding(raw32); - break; - - default: - result = process_armv7_thumb_16_instruction_set_encoding(raw16); - break; - - } - - break; - - default: - assert(0); - break; - - } - - return result; - -} |