diff options
Diffstat (limited to 'src/analysis/decomp')
-rwxr-xr-x | src/analysis/decomp/Makefile.am | 14 | ||||
-rw-r--r-- | src/analysis/decomp/decompiler.c | 131 | ||||
-rw-r--r-- | src/analysis/decomp/decompiler.h | 37 |
3 files changed, 182 insertions, 0 deletions
diff --git a/src/analysis/decomp/Makefile.am b/src/analysis/decomp/Makefile.am new file mode 100755 index 0000000..7b797bd --- /dev/null +++ b/src/analysis/decomp/Makefile.am @@ -0,0 +1,14 @@ + +noinst_LTLIBRARIES = libanalysisdecomp.la + +libanalysisdecomp_la_SOURCES = \ + decompiler.h decompiler.c + +libanalysisdecomp_la_LDFLAGS = + + +INCLUDES = $(LIBGTK_CFLAGS) $(LIBXML_CFLAGS) + +AM_CPPFLAGS = + +AM_CFLAGS = $(DEBUG_CFLAGS) $(WARNING_FLAGS) $(COMPLIANCE_FLAGS) 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; + +} diff --git a/src/analysis/decomp/decompiler.h b/src/analysis/decomp/decompiler.h new file mode 100644 index 0000000..363ad27 --- /dev/null +++ b/src/analysis/decomp/decompiler.h @@ -0,0 +1,37 @@ + +/* 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/>. + */ + + +#ifndef _ANALYSIS_DECOMP_DECOMPILER_H +#define _ANALYSIS_DECOMP_DECOMPILER_H + + +#include "../binary.h" + + + +/* Procède à la décompilation des routines d'un fichier donné. */ +GCodeBuffer *decompile_all_from_file(const GOpenidaBinary *, const char *); + + + +#endif /* _ANALYSIS_DECOMP_DECOMPILER_H */ |