diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2015-01-30 23:37:39 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2015-01-30 23:37:39 (GMT) |
commit | d246c98c515cb44c5bc4c742a674bae2e824872b (patch) | |
tree | 2ea1ec27ae5fba761ee778ba4ddb85c7752ebbf5 /src/arch/context.c | |
parent | 262c95e0b088a56e9fd919edc57ad19f85e2e40e (diff) |
Bound a symbol for each loaded value for 'ldr' instructions.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@462 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/arch/context.c')
-rw-r--r-- | src/arch/context.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/arch/context.c b/src/arch/context.c index 794030a..5427e4a 100644 --- a/src/arch/context.c +++ b/src/arch/context.c @@ -85,6 +85,9 @@ static void g_proc_context_init(GProcContext *ctx) ctx->drop_points = NULL; ctx->dp_count = 0; + ctx->extra_symbols = NULL; + ctx->esyms_count = 0; + } @@ -205,3 +208,55 @@ virt_t g_proc_context_pop_drop_point(GProcContext *ctx) return result; } + + +/****************************************************************************** +* * +* Paramètres : ctx = contexte de désassemblage à compléter. * +* addr = adresse d'un nouveau symbole à traiter. * +* * +* Description : Empile une adresse de nouveau symbole à prendre en compte. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void g_proc_context_push_new_symbol_at(GProcContext *ctx, const vmpa2t *addr) +{ + ctx->extra_symbols = (vmpa2t *)realloc(ctx->extra_symbols, ++ctx->esyms_count * sizeof(vmpa2t)); + + copy_vmpa(&ctx->extra_symbols[ctx->esyms_count - 1], addr); + +} + + +/****************************************************************************** +* * +* Paramètres : ctx = contexte de désassemblage à compléter. * +* addr = adresse d'un nouveau symbole à traiter. * +* * +* Description : Dépile une adresse de nouveau symbole à prendre en compte. * +* * +* Retour : true si un symbole était bien encore en stock, false sinon. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool g_proc_context_pop_new_symbol_at(GProcContext *ctx, vmpa2t *addr) +{ + bool result; /* Bilan à retourner */ + + result = (ctx->esyms_count > 0); + + if (result) + { + ctx->esyms_count--; + copy_vmpa(addr, &ctx->extra_symbols[ctx->esyms_count]); + } + + return result; + +} |