diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2014-12-25 16:31:33 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2014-12-25 16:31:33 (GMT) |
commit | 19e1a97fafb1b73d0efcd995b31951daf1a5c661 (patch) | |
tree | 9cbc897ddb1d3005fb8dadfa3ad830c607acdddd /src/arch/context.c | |
parent | 9cab778bfaaca2589a383445e8569d99d73374d5 (diff) |
Cleaned all the code for immediate operands.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@444 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/arch/context.c')
-rw-r--r-- | src/arch/context.c | 108 |
1 files changed, 107 insertions, 1 deletions
diff --git a/src/arch/context.c b/src/arch/context.c index 220ed14..46c4dd1 100644 --- a/src/arch/context.c +++ b/src/arch/context.c @@ -2,7 +2,7 @@ /* Chrysalide - Outil d'analyse de fichiers binaires * context.c - contexte lié à l'exécution d'un processeur * - * Copyright (C) 2011 Cyrille Bagard + * Copyright (C) 2011-2014 Cyrille Bagard * * This file is part of Chrysalide. * @@ -24,6 +24,11 @@ #include "context.h" +#include <assert.h> +#include <malloc.h> +#include <string.h> + + #include "context-int.h" @@ -73,5 +78,106 @@ static void g_proc_context_class_init(GProcContextClass *klass) static void g_proc_context_init(GProcContext *ctx) { + ctx->drop_points = NULL; + ctx->dp_count = 0; + +} + + +/****************************************************************************** +* * +* Paramètres : ctx = contexte de désassemblage à compléter. * +* addr = adresse d'un nouveau point de départ à traiter. * +* * +* Description : Ajoute une adresse virtuelle comme point de départ de code. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void g_proc_context_push_drop_point(GProcContext *ctx, virt_t addr) +{ + ctx->drop_points = (virt_t *)realloc(ctx->drop_points, ++ctx->dp_count * sizeof(virt_t)); + + ctx->drop_points[ctx->dp_count - 1] = addr; + +} + + +/****************************************************************************** +* * +* Paramètres : ctx = contexte de désassemblage à consulter. * +* * +* Description : Indique si des points de départ restent à traiter ou non. * +* * +* Retour : true s'il existe encore au moins un point, false sinon. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool g_proc_context_has_drop_points(const GProcContext *ctx) +{ + return ctx->dp_count > 0; + +} + + +/****************************************************************************** +* * +* Paramètres : ctx = contexte de désassemblage à consulter. * +* addr = adresse de mémoire virtuelle à rechercher. * +* * +* Description : Précise si une adresse donnée figure comme point de départ. * +* * +* Retour : true si l'adresse est connue en interne, false sinon. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool g_proc_context_has_addr_as_drop_points(const GProcContext *ctx, virt_t addr) +{ + bool result; /* Bilan à retourner */ + size_t i; /* Boucle de parcours */ + + result = false; + + for (i = 0; i < ctx->dp_count && !result; i++) + result = (ctx->drop_points[i] == addr); + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : ctx = contexte de désassemblage à compléter. * +* * +* Description : Fournit une adresse virtuelle comme point de départ de code. * +* * +* Retour : Adresse d'un point de départ de code à traiter. * +* * +* Remarques : - * +* * +******************************************************************************/ + +virt_t g_proc_context_pop_drop_point(GProcContext *ctx) +{ + virt_t result; /* Adresse à retourner */ + + assert(ctx->dp_count > 0); + + result = ctx->drop_points[0]; + + if (ctx->dp_count > 1) + memmove(&ctx->drop_points[0], &ctx->drop_points[1], (ctx->dp_count - 1) * sizeof(virt_t)); + + ctx->drop_points = (virt_t *)realloc(ctx->drop_points, --ctx->dp_count * sizeof(virt_t)); + + return result; } |