diff options
Diffstat (limited to 'src/analysis/decomp/decompiler.c')
-rw-r--r-- | src/analysis/decomp/decompiler.c | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/src/analysis/decomp/decompiler.c b/src/analysis/decomp/decompiler.c new file mode 100644 index 0000000..284d3e1 --- /dev/null +++ b/src/analysis/decomp/decompiler.c @@ -0,0 +1,131 @@ + +/* OpenIDA - Outil d'analyse de fichiers binaires + * decompiler.h - prototypes pour l'encadrement des phases de décompilation + * + * Copyright (C) 2010 Cyrille Bagard + * + * This file is part of OpenIDA. + * + * OpenIDA is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * OpenIDA is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Foobar. If not, see <http://www.gnu.org/licenses/>. + */ + + +#include "decompiler.h" + + +#include <malloc.h> +#include <stdio.h> +#include <string.h> + + +#include <i18n.h> + + +#include "../../decomp/output.h" +#include "../../decomp/lang/java.h" /* FIXME : remme ! */ + + + +/* Construit la description d'introduction de la décompilation. */ +static void build_decomp_prologue(GCodeBuffer *, const char *); + + + +/****************************************************************************** +* * +* Paramètres : buffer = tampon de destination pour le texte. * +* filename = nom du fichier ciblé à décompiler. * +* * +* Description : Construit la description d'introduction de la décompilation. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void build_decomp_prologue(GCodeBuffer *buffer, const char *filename) +{ + GLangOutput *output; /* Modèle de sortie adéquat */ + GBufferLine *line; /* Ligne de destination */ + size_t len; /* Taille du texte */ + char *content; /* Contenu textuel d'une ligne */ + + output = g_java_output_new(); + + /* Introduction */ + + line = g_lang_output_write_comments(output, buffer, + SL(_("Binary data decompiled by OpenIDA"))); + g_buffer_line_start_merge_at(line, BLC_ADDRESS); + + line = g_lang_output_write_comments(output, buffer, + SL(_("OpenIDA is free software - © 2008-2010 Cyrille Bagard"))); + g_buffer_line_start_merge_at(line, BLC_ADDRESS); + + line = g_lang_output_write_comments(output, buffer, NULL, 0); + g_buffer_line_start_merge_at(line, BLC_ADDRESS); + + /* Fichier */ + + if (filename == NULL) + filename = _("whole binary"); + + len = strlen(_("File: ")) + strlen(filename) + 1; + content = (char *)calloc(len, sizeof(char)); + + snprintf(content, len, "%s%s", _("File: "), filename); + + line = g_lang_output_write_comments(output, buffer, content, len - 1); + g_buffer_line_start_merge_at(line, BLC_ADDRESS); + + free(content); + + /* Lignes de séparation */ + + line = g_lang_output_write_comments(output, buffer, NULL, 0); + g_buffer_line_start_merge_at(line, BLC_ADDRESS); + + line = g_lang_output_write_comments(output, buffer, NULL, 0); + g_buffer_line_start_merge_at(line, BLC_ADDRESS); + +} + + +/****************************************************************************** +* * +* Paramètres : binary = représentation de binaire chargé. * +* filename = nom du fichier source à cibler. * +* * +* Description : Procède à la décompilation des routines d'un fichier donné. * +* * +* Retour : Tampon de code mis en place. * +* * +* Remarques : - * +* * +******************************************************************************/ + +GCodeBuffer *decompile_all_from_file(const GOpenidaBinary *binary, const char *filename) +{ + GCodeBuffer *result; /* Tampon constitué à renvoyer */ + + result = g_code_buffer_new(); + + + build_decomp_prologue(result, filename); + + + return result; + +} |