diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2012-07-23 19:07:29 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2012-07-23 19:07:29 (GMT) |
commit | 8b35a66464636d0c46237af7490a6ca6866ecc4d (patch) | |
tree | 92199b36e3af00eb4c175a80c20b9b14511a6a45 /src/decomp/expr/pseudo.c | |
parent | 8b2189a819c7a761cfdb97d9e3382ea963f225fb (diff) |
Improved decompilation of Dalvik bytecode.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@252 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/decomp/expr/pseudo.c')
-rw-r--r-- | src/decomp/expr/pseudo.c | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/src/decomp/expr/pseudo.c b/src/decomp/expr/pseudo.c index 06ba184..bb5861d 100644 --- a/src/decomp/expr/pseudo.c +++ b/src/decomp/expr/pseudo.c @@ -24,6 +24,7 @@ #include "pseudo.h" +#include <malloc.h> #include <stdio.h> #include <string.h> @@ -38,6 +39,7 @@ struct _GPseudoRegister GDecExpression parent; /* A laisser en premier */ size_t index; /* Position dans l'ensemble */ + GBinVariable *var; /* Variable plus précise */ }; @@ -148,10 +150,19 @@ GDecInstruction *g_pseudo_register_new(void) static void g_pseudo_register_print(const GPseudoRegister *reg, GCodeBuffer *buffer, GBufferLine *line, GLangOutput *output) { char label[32]; - - snprintf(label, 32, "var%d", reg->index); - - g_buffer_line_insert_text(line, BLC_ASSEMBLY_HEAD, label, strlen(label), RTT_RAW); + char *name; + + if (reg->var != NULL) + { + name = g_binary_variable_to_string(reg->var, true); + g_buffer_line_insert_text(line, BLC_ASSEMBLY_HEAD, name, strlen(name), RTT_RAW); + free(name); + } + else + { + snprintf(label, 32, "var%zu", reg->index); + g_buffer_line_insert_text(line, BLC_ASSEMBLY_HEAD, label, strlen(label), RTT_RAW); + } } @@ -174,3 +185,23 @@ void g_pseudo_register_set_index(GPseudoRegister *reg, size_t index) reg->index = index; } + + +/****************************************************************************** +* * +* Paramètres : reg = expression représentant un pseudo-registre à traiter. * +* var = indications supplémentaire quant à la variable. * +* * +* Description : Précise le nom et le type de la variable. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +void g_pseudo_register_set_variable(GPseudoRegister *reg, GBinVariable *var) +{ + reg->var = var; + +} |