diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2014-12-30 08:25:05 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2014-12-30 08:25:05 (GMT) |
commit | 57d7eff57c20e75aaa4ccd34f1d9d733e12bb232 (patch) | |
tree | a60199f7323a31e0bf22b8f8747fdf402f2c481d /src/arch/arm/context.c | |
parent | 19e1a97fafb1b73d0efcd995b31951daf1a5c661 (diff) |
Tracked each binary area during the disassembling process and tried to follow the execution flow.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@445 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/arch/arm/context.c')
-rw-r--r-- | src/arch/arm/context.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/arch/arm/context.c b/src/arch/arm/context.c index c86b190..7f41b92 100644 --- a/src/arch/arm/context.c +++ b/src/arch/arm/context.c @@ -60,6 +60,9 @@ static void g_arm_context_dispose(GArmContext *); /* Procède à la libération totale de la mémoire. */ static void g_arm_context_finalize(GArmContext *); +/* Ajoute une adresse virtuelle comme point de départ de code. */ +static void g_arm_context_push_drop_point(GArmContext *, virt_t ); + /* ------------------------- CONTEXTE POUR LA DECOMPILATION ------------------------- */ @@ -124,12 +127,17 @@ G_DEFINE_TYPE(GArmContext, g_arm_context, G_TYPE_PROC_CONTEXT); static void g_arm_context_class_init(GArmContextClass *klass) { GObjectClass *object; /* Autre version de la classe */ + GProcContextClass *proc; /* Version parente de la classe*/ object = G_OBJECT_CLASS(klass); object->dispose = (GObjectFinalizeFunc/* ! */)g_arm_context_dispose; object->finalize = (GObjectFinalizeFunc)g_arm_context_finalize; + proc = G_PROC_CONTEXT_CLASS(klass); + + proc->push_point = (push_drop_point_fc)g_arm_context_push_drop_point; + } @@ -212,6 +220,42 @@ GArmContext *g_arm_context_new(void) } +/****************************************************************************** +* * +* 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 : - * +* * +******************************************************************************/ + +static void g_arm_context_push_drop_point(GArmContext *ctx, virt_t addr) +{ + + + printf("PUSH !!\n"); + + + + if (addr & 0x1) + { + addr -= 0x1; + + + } + else ; + + // ARM / Thumb + + G_PROC_CONTEXT_CLASS(g_arm_context_parent_class)->push_point(G_PROC_CONTEXT(ctx), addr); + +} + + /* ---------------------------------------------------------------------------------- */ /* CONTEXTE POUR LA DECOMPILATION */ |