diff options
Diffstat (limited to 'plugins/arm')
-rw-r--r-- | plugins/arm/processor.c | 31 | ||||
-rw-r--r-- | plugins/arm/v7/processor.c | 93 |
2 files changed, 115 insertions, 9 deletions
diff --git a/plugins/arm/processor.c b/plugins/arm/processor.c index ede8674..830fa8a 100644 --- a/plugins/arm/processor.c +++ b/plugins/arm/processor.c @@ -40,6 +40,9 @@ static void g_arm_processor_dispose(GArmProcessor *); /* Procède à la libération totale de la mémoire. */ static void g_arm_processor_finalize(GArmProcessor *); +/* Indique si l'architecture possède un espace virtuel ou non. */ +static bool g_arm_processor_has_virtual_space(const GArmProcessor *); + /* Indique le type défini par la GLib pour le processeur ARM. */ @@ -61,12 +64,17 @@ G_DEFINE_TYPE(GArmProcessor, g_arm_processor, G_TYPE_ARCH_PROCESSOR); static void g_arm_processor_class_init(GArmProcessorClass *klass) { GObjectClass *object_class; /* Autre version de la classe */ + GArchProcessorClass *proc; /* Encore une autre vision... */ object_class = G_OBJECT_CLASS(klass); object_class->dispose = (GObjectFinalizeFunc/* ! */)g_arm_processor_dispose; object_class->finalize = (GObjectFinalizeFunc)g_arm_processor_finalize; + proc = G_ARCH_PROCESSOR_CLASS(klass); + + proc->has_vspace = (has_processor_vspace_fc)g_arm_processor_has_virtual_space; + } @@ -124,3 +132,26 @@ static void g_arm_processor_finalize(GArmProcessor *proc) G_OBJECT_CLASS(g_arm_processor_parent_class)->finalize(G_OBJECT(proc)); } + + +/****************************************************************************** +* * +* Paramètres : proc = processeur d'architecture à consulter. * +* * +* Description : Indique si l'architecture possède un espace virtuel ou non. * +* * +* Retour : true si un espace virtuel existe, false sinon. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static bool g_arm_processor_has_virtual_space(const GArmProcessor *proc) +{ + bool result; /* Indication à retourner */ + + result = true; + + return result; + +} diff --git a/plugins/arm/v7/processor.c b/plugins/arm/v7/processor.c index 078cc2d..7852284 100644 --- a/plugins/arm/v7/processor.c +++ b/plugins/arm/v7/processor.c @@ -66,6 +66,15 @@ static void g_armv7_processor_finalize(GArmV7Processor *); /* Fournit la désignation interne du processeur d'architecture. */ static char *g_armv7_processor_get_key(const GArmV7Processor *); +/* Fournit le nom humain de l'architecture visée. */ +static char *g_armv7_processor_get_desc(const GArmV7Processor *); + +/* Fournit la taille de l'espace mémoire d'une architecture. */ +static MemoryDataSize g_armv7_processor_get_memory_size(const GArmV7Processor *); + +/* Fournit la taille min. des instructions d'une architecture. */ +static MemoryDataSize g_armv7_processor_get_instruction_min_size(const GArmV7Processor *); + /* Fournit un contexte pour l'exécution du processeur ARM. */ static GArmV7Context *g_armv7_processor_get_context(const GArmV7Processor *); @@ -102,16 +111,12 @@ static void g_armv7_processor_class_init(GArmV7ProcessorClass *klass) proc = G_ARCH_PROCESSOR_CLASS(klass); - proc->desc = "ARM v7"; - - proc->endianness = SRE_LITTLE; - proc->memsize = MDS_32_BITS; - proc->inssize = MDS_32_BITS; - proc->virt_space = true; - proc->get_key = (get_processor_key_fc)g_armv7_processor_get_key; - proc->get_ctx = (get_processor_context_fc)g_armv7_processor_get_context; + proc->get_desc = (get_processor_desc_fc)g_armv7_processor_get_desc; + proc->get_memsize = (get_processor_memsize_fc)g_armv7_processor_get_memory_size; + proc->get_inssize = (get_processor_inssize_fc)g_armv7_processor_get_instruction_min_size; + proc->get_ctx = (get_processor_context_fc)g_armv7_processor_get_context; proc->disassemble = (disass_instr_fc)g_armv7_processor_disassemble; } @@ -131,6 +136,7 @@ static void g_armv7_processor_class_init(GArmV7ProcessorClass *klass) static void g_armv7_processor_init(GArmV7Processor *proc) { + G_ARCH_PROCESSOR(proc)->endianness = SRE_LITTLE; } @@ -221,6 +227,75 @@ static char *g_armv7_processor_get_key(const GArmV7Processor *proc) /****************************************************************************** * * +* Paramètres : proc = processeur d'architecture à consulter. * +* * +* Description : Fournit le nom humain de l'architecture visée. * +* * +* Retour : Désignation humaine associée au processeur. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static char *g_armv7_processor_get_desc(const GArmV7Processor *proc) +{ + char *result; /* Désignation à renvoyer */ + + result = strdup("ARM v7"); + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : proc = processeur d'architecture à consulter. * +* * +* Description : Fournit la taille de l'espace mémoire d'une architecture. * +* * +* Retour : Taille de l'espace mémoire. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static MemoryDataSize g_armv7_processor_get_memory_size(const GArmV7Processor *proc) +{ + MemoryDataSize result; /* Taille à retourner */ + + result = MDS_32_BITS; + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : proc = processeur d'architecture à consulter. * +* * +* Description : Fournit la taille min. des instructions d'une architecture. * +* * +* Retour : Taille d'encodage des instructions. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static MemoryDataSize g_armv7_processor_get_instruction_min_size(const GArmV7Processor *proc) +{ + MemoryDataSize result; /* Taille à retourner */ + + result = MDS_32_BITS; + + return result; + +} + + +/****************************************************************************** +* * * Paramètres : proc = architecture, spectatrice ici. * * * * Description : Fournit un contexte pour l'exécution du processeur Arm. * @@ -262,7 +337,7 @@ static GArchInstruction *g_armv7_processor_disassemble(const GArmV7Processor *pr uint32_t raw32; /* Donnée 32 bits à analyser */ ArmV7InstrSet iset; /* Type de jeu d'instructions */ - endian = G_ARCH_PROCESSOR_GET_CLASS(proc)->endianness; + endian = G_ARCH_PROCESSOR(proc)->endianness; iset = g_armv7_context_find_encoding(ctx, get_virt_addr(pos)); |