diff options
Diffstat (limited to 'src/analysis/decomp/decompiler.c')
| -rw-r--r-- | src/analysis/decomp/decompiler.c | 33 | 
1 files changed, 30 insertions, 3 deletions
| diff --git a/src/analysis/decomp/decompiler.c b/src/analysis/decomp/decompiler.c index 8e574c0..91a9163 100644 --- a/src/analysis/decomp/decompiler.c +++ b/src/analysis/decomp/decompiler.c @@ -2,7 +2,7 @@  /* OpenIDA - Outil d'analyse de fichiers binaires   * decompiler.c - encadrement des phases de décompilation   * - * Copyright (C) 2010 Cyrille Bagard + * Copyright (C) 2010-2012 Cyrille Bagard   *   *  This file is part of OpenIDA.   * @@ -32,7 +32,9 @@  #include <i18n.h> +#include "il.h"  #include "../../decomp/output.h" +#include "../../decomp/expr/block.h"  #include "../../decomp/lang/java.h"    /* FIXME : remme ! */  #include "../../format/format.h" @@ -138,7 +140,11 @@ static void prepare_all_routines_for_decomp(const GLoadedBinary *binary, const c      size_t i;      GDecContext *context;                   /* Contexte pour la décompil.  */ -    GDecInstruction *instr; +    GDecInstruction *dinstrs; + +    GArchInstruction *instrs;                /* Instructions natives        */ + +    vmpa_t max;                             /* Première adresse à écarter  */      format = g_loaded_binary_get_format(binary);      proc = get_arch_processor_from_format(G_EXE_FORMAT(format)); @@ -152,7 +158,28 @@ static void prepare_all_routines_for_decomp(const GLoadedBinary *binary, const c      {          context = g_arch_processor_get_decomp_context(proc); -        instr = g_binary_format_decompile_routine(G_BIN_FORMAT(format), routines[i], context); +        g_object_set_data(G_OBJECT(context), "format", format); +        g_object_set_data(G_OBJECT(context), "routine", routines[i]); +        g_dec_context_set_max_address(context, max); + +        instrs = g_binary_routine_get_instructions(routines[i]); + +        max = g_binary_routine_get_address(routines[i]) +            + g_binary_routine_get_size(routines[i]); + +        printf("##### DECOMPILE '%s' #####\n", g_binary_routine_to_string(routines[i])); + +        dinstrs = build_decompiled_block(instrs, +                                         g_binary_routine_get_address(routines[i]), +                                         max, VMPA_MAX, context); + +        //instr = g_binary_format_decompile_routine(G_BIN_FORMAT(format), routines[i], context); + + + +        g_binary_routine_set_decomp_instructions(routines[i], dinstrs); + +          if (context != NULL)              g_object_unref(context); | 
