summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2015-02-03 23:21:49 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2015-02-03 23:21:49 (GMT)
commit425860b441b21e4aca7bf2473be26b0fe1e756e2 (patch)
tree341a0fc8b370d76566f3e332c344ffae5c065916
parent5511e355e7810f06bd610b79bcc94402c88d7ec9 (diff)
Removed all references to binary parts (GBinPart) and updated the code.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@465 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
-rw-r--r--ChangeLog47
-rw-r--r--src/analysis/binary-int.h4
-rw-r--r--src/analysis/binary.c315
-rw-r--r--src/analysis/binary.h7
-rw-r--r--src/analysis/disass/disassembler.c16
-rw-r--r--src/analysis/disass/disassembler.h3
-rw-r--r--src/analysis/disass/macro.c1
-rw-r--r--src/arch/processor-int.h1
-rw-r--r--src/dialogs/Makefile.am1
-rw-r--r--src/dialogs/binparts.c779
-rw-r--r--src/dialogs/binparts.h40
-rw-r--r--src/format/Makefile.am1
-rw-r--r--src/format/dex/class.c4
-rw-r--r--src/format/dex/class.h2
-rwxr-xr-xsrc/format/dex/dex.c7
-rw-r--r--src/format/dex/method.c4
-rw-r--r--src/format/dex/method.h4
-rw-r--r--src/format/elf/elf.c102
-rw-r--r--src/format/exe_format-int.h100
-rw-r--r--src/format/exe_format.c485
-rw-r--r--src/format/exe_format.h152
-rw-r--r--src/format/executable-int.h4
-rw-r--r--src/format/executable.c27
-rw-r--r--src/format/executable.h4
-rwxr-xr-xsrc/format/java/java.c50
-rw-r--r--src/format/part.c416
-rw-r--r--src/format/part.h97
-rw-r--r--src/format/pe/pe.c7
28 files changed, 70 insertions, 2610 deletions
diff --git a/ChangeLog b/ChangeLog
index daee274..4099064 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,50 @@
+15-02-04 Cyrille Bagard <nocbos@gmail.com>
+
+ * src/analysis/binary.c:
+ * src/analysis/binary.h:
+ * src/analysis/binary-int.h:
+ * src/analysis/disass/disassembler.c:
+ * src/analysis/disass/disassembler.h:
+ * src/analysis/disass/macro.c:
+ * src/arch/processor-int.h:
+ Remove all references to binary parts (GBinPart) and update the code.
+
+ * src/dialogs/binparts.c:
+ * src/dialogs/binparts.h:
+ Deleted entries.
+
+ * src/dialogs/Makefile.am:
+ Remove the 'binparts.[ch]' files from libdialogs_la_SOURCES.
+
+ * src/format/dex/class.c:
+ * src/format/dex/class.h:
+ * src/format/dex/dex.c:
+ * src/format/dex/method.c:
+ * src/format/dex/method.h:
+ * src/format/elf/elf.c:
+ * src/format/executable.c:
+ * src/format/executable.h:
+ * src/format/executable-int.h:
+ Remove all references to binary parts (GBinPart) and update the code.
+
+ * src/format/exe_format.c:
+ * src/format/exe_format.h:
+ * src/format/exe_format-int.h:
+ Deleted entries.
+
+ * src/format/java/java.c:
+ Remove all references to binary parts (GBinPart) and update the code.
+
+ * src/format/Makefile.am:
+ Remove the 'part.[ch]' files from libformat_la_SOURCES.
+
+ * src/format/part.c:
+ * src/format/part.h:
+ Deleted entries.
+
+ * src/format/pe/pe.c:
+ Remove all references to binary parts (GBinPart) and update the code.
+
15-02-01 Cyrille Bagard <nocbos@gmail.com>
* src/analysis/disass/area.c:
diff --git a/src/analysis/binary-int.h b/src/analysis/binary-int.h
index fa06a25..ec98bf9 100644
--- a/src/analysis/binary-int.h
+++ b/src/analysis/binary-int.h
@@ -67,10 +67,6 @@ struct _GLoadedBinary
GExeFormat *format; /* Format du binaire */
GArchProcessor *proc; /* Architecture du binaire */
- BinaryPartModel model; /* Modèle de sélection */
- GBinPart **parts[BPM_COUNT]; /* Parties binaires à analyser */
- size_t parts_count[BPM_COUNT]; /* Quantité de ces parties */
-
GArchInstruction *instrs; /* Instructions d'assemblage */
GCodeBuffer *disass_buffer; /* Instructions lisibles */
GCodeBuffer **dec_buffers; /* Sources sous forme de texte */
diff --git a/src/analysis/binary.c b/src/analysis/binary.c
index 0c7a71c..35f7acd 100644
--- a/src/analysis/binary.c
+++ b/src/analysis/binary.c
@@ -62,12 +62,6 @@ static void g_loaded_binary_dispose(GLoadedBinary *);
/* Procède à la libération totale de la mémoire. */
static void g_loaded_binary_finalize(GLoadedBinary *);
-/* Charge les parties intéressantes du binaire à partir d'XML. */
-static bool g_loaded_binary_load_parts_from_xml(GLoadedBinary *, xmlXPathContextPtr, const char *);
-
-/* Ecrit les parties de valeur du binaire dans un fichier XML. */
-static bool g_loaded_binary_save_parts(const GLoadedBinary *, xmlDocPtr, xmlXPathContextPtr, const char *);
-
/* Acquitte la fin d'un désasemblage différé et complet. */
static void ack_completed_disassembly(GDelayedDisassembly *, GLoadedBinary *);
@@ -281,11 +275,6 @@ GLoadedBinary *g_loaded_binary_new_from_xml(xmlXPathContextPtr context, const ch
- /*
- if (!g_loaded_binary_load_parts_from_xml(result, context, path))
- goto glbnfx_error;
- */
-
printf("data :: %p length :: %d\n", result->bin_data, result->bin_length);
@@ -405,229 +394,6 @@ bool g_loaded_binary_save(const GLoadedBinary *binary, xmlDocPtr xdoc, xmlXPathC
result = g_loaded_binary_save_storage(binary, xdoc, context, path);
- /* Parties à désassembler */
-
- result = g_loaded_binary_save_parts(binary, xdoc, context, path);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : context = contexte pour les recherches XPath. *
-* path = chemin d'accès au noeud XML à lire. *
-* *
-* Description : Charge les parties intéressantes du binaire à partir d'XML. *
-* *
-* Retour : Bilan de l'opération. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static bool g_loaded_binary_load_parts_from_xml(GLoadedBinary *binary, xmlXPathContextPtr context, const char *path)
-{
- bool result; /* Bilan à retourner */
- char *access; /* Chemin pour une sous-config.*/
- xmlXPathObjectPtr xobjects; /* Cible d'une recherche */
- int i; /* Boucle de parcours */
- GBinPart *part; /* Partie binaire à traiter */
- off_t offset; /* Position de cette partie */
- vmpa_t addr; /* Adresse correspondante */
-
- result = NULL;
-
- /* Parties à désassembler : default */
-
- access = strdup(path);
- access = stradd(access, "/BinParts/Default/Part");
-
- xobjects = get_node_xpath_object(context, access);
-
- for (i = 0; i < XPATH_OBJ_NODES_COUNT(xobjects); i++)
- {
- part = g_binary_part_load_from_xml(NODE_FROM_PATH_OBJ(xobjects, i));
-
- if (part != NULL)
- {
- g_binary_part_get_values(part, &offset, NULL, NULL);
-
- if (!g_exe_format_translate_offset_into_address(G_EXE_FORMAT(binary->format), offset, &addr))
- {
- g_object_unref(G_OBJECT(part));
- continue;
- }
-
- binary->parts_count[BPM_DEFAULT]++;
- binary->parts[BPM_DEFAULT] = (GBinPart **)realloc(binary->parts[BPM_DEFAULT],
- binary->parts_count[BPM_DEFAULT] * sizeof(GBinPart *));
-
- binary->parts[BPM_DEFAULT][binary->parts_count[BPM_DEFAULT] - 1] = part;
-
- }
-
- }
-
- if(xobjects != NULL)
- xmlXPathFreeObject(xobjects);
-
- free(access);
-
- qsort(binary->parts[BPM_DEFAULT], binary->parts_count[BPM_DEFAULT],
- sizeof(GBinPart *), (__compar_fn_t)g_binary_part_compare);
-
- /* Parties à désassembler : routines */
-
- access = strdup(path);
- access = stradd(access, "/BinParts/Routines/Part");
-
- xobjects = get_node_xpath_object(context, access);
-
- for (i = 0; i < XPATH_OBJ_NODES_COUNT(xobjects); i++)
- {
- part = g_binary_part_load_from_xml(NODE_FROM_PATH_OBJ(xobjects, i));
-
- if (part != NULL)
- {
- g_binary_part_get_values(part, &offset, NULL, NULL);
-
- if (!g_exe_format_translate_offset_into_address(G_EXE_FORMAT(binary->format), offset, &addr))
- {
- g_object_unref(G_OBJECT(part));
- continue;
- }
- else g_binary_part_set_address(part, addr);
-
- binary->parts_count[BPM_ROUTINES]++;
- binary->parts[BPM_ROUTINES] = (GBinPart **)realloc(binary->parts[BPM_ROUTINES],
- binary->parts_count[BPM_ROUTINES] * sizeof(GBinPart *));
-
- binary->parts[BPM_ROUTINES][binary->parts_count[BPM_ROUTINES] - 1] = part;
-
- }
-
- }
-
- if(xobjects != NULL)
- xmlXPathFreeObject(xobjects);
-
- free(access);
-
- qsort(binary->parts[BPM_ROUTINES], binary->parts_count[BPM_ROUTINES],
- sizeof(GBinPart *), (__compar_fn_t)g_binary_part_compare);
-
- /* Parties à désassembler : utilisateur */
-
- access = strdup(path);
- access = stradd(access, "/BinParts/User/Part");
-
- xobjects = get_node_xpath_object(context, access);
-
- for (i = 0; i < XPATH_OBJ_NODES_COUNT(xobjects); i++)
- {
- part = g_binary_part_load_from_xml(NODE_FROM_PATH_OBJ(xobjects, i));
-
- if (part != NULL)
- {
- g_binary_part_get_values(part, &offset, NULL, NULL);
-
- if (!g_exe_format_translate_offset_into_address(G_EXE_FORMAT(binary->format), offset, &addr))
- {
- g_object_unref(G_OBJECT(part));
- continue;
- }
-
- binary->parts_count[BPM_USER]++;
- binary->parts[BPM_USER] = (GBinPart **)realloc(binary->parts[BPM_USER],
- binary->parts_count[BPM_USER] * sizeof(GBinPart *));
-
- binary->parts[BPM_USER][binary->parts_count[BPM_USER] - 1] = part;
-
- }
-
- }
-
- if(xobjects != NULL)
- xmlXPathFreeObject(xobjects);
-
- free(access);
-
- qsort(binary->parts[BPM_USER], binary->parts_count[BPM_USER],
- sizeof(GBinPart *), (__compar_fn_t)g_binary_part_compare);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : binary = élément binaire à traiter. *
-* xdoc = structure XML en cours d'édition. *
-* context = contexte à utiliser pour les recherches. *
-* path = chemin d'accès réservé au binaire. *
-* *
-* Description : Ecrit les parties de valeur du binaire dans un fichier XML. *
-* *
-* Retour : true si l'opération a bien tourné, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static bool g_loaded_binary_save_parts(const GLoadedBinary *binary, xmlDocPtr xdoc, xmlXPathContextPtr context, const char *path)
-{
- bool result; /* Bilan à faire remonter */
- char *access; /* Chemin d'accès à un élément */
- xmlNodePtr node; /* Point d'insertion XML */
- size_t i; /* Boucle de parcours */
-
- result = true;
-
- if (binary->parts_count[BPM_DEFAULT] > 0)
- {
- access = strdup(path);
- access = stradd(access, "/BinParts/Default");
-
- node = ensure_node_exist(xdoc, context, access);
-
- free(access);
-
- for (i = 0; i < binary->parts_count[BPM_DEFAULT] && result; i++)
- result &= g_binary_part_save_to_xml(binary->parts[BPM_DEFAULT][i], xdoc, node);
-
- }
-
- if (binary->parts_count[BPM_ROUTINES] > 0)
- {
- access = strdup(path);
- access = stradd(access, "/BinParts/Routines");
-
- node = ensure_node_exist(xdoc, context, access);
-
- free(access);
-
- for (i = 0; i < binary->parts_count[BPM_ROUTINES] && result; i++)
- result &= g_binary_part_save_to_xml(binary->parts[BPM_ROUTINES][i], xdoc, node);
-
- }
-
- if (binary->parts_count[BPM_USER] > 0)
- {
- access = strdup(path);
- access = stradd(access, "/BinParts/User");
-
- node = ensure_node_exist(xdoc, context, access);
-
- free(access);
-
- for (i = 0; i < binary->parts_count[BPM_USER] && result; i++)
- result &= g_binary_part_save_to_xml(binary->parts[BPM_USER][i], xdoc, node);
-
- }
-
return result;
}
@@ -1085,56 +851,6 @@ bool g_loaded_binary_add_to_collection(GLoadedBinary *binary, DBFeatures feature
-
-/******************************************************************************
-* *
-* Paramètres : binary = élément binaire à consulter. *
-* parts = liste des zones binaires à analyser. *
-* model = modèle de sélection des zones. *
-* count = quantité de zones listées. *
-* *
-* Description : Définit les parties de binaire à analyser. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void g_loaded_binary_set_parts(GLoadedBinary *binary, BinaryPartModel model, GBinPart **parts, size_t count)
-{
- qsort(parts, count, sizeof(GBinPart *), (__compar_fn_t)g_binary_part_compare);
-
- binary->parts[model] = parts;
- binary->parts_count[model] = count;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : binary = élément binaire à consulter. *
-* model = modèle de sélection des zones. [OUT] *
-* count = quantité de zones listées. [OUT] *
-* *
-* Description : Fournit les parties de binaire analysées. *
-* *
-* Retour : Zones binaires à analyser. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GBinPart ***g_loaded_binary_get_parts(const GLoadedBinary *binary, BinaryPartModel *model, size_t **count)
-{
- *model = binary->model;
- *count = binary->parts_count;
-
- return binary->parts;
-
-}
-
-
/******************************************************************************
* *
* Paramètres : binary = élément binaire à traiter. *
@@ -1149,9 +865,6 @@ GBinPart ***g_loaded_binary_get_parts(const GLoadedBinary *binary, BinaryPartMod
void g_loaded_binary_analyse(GLoadedBinary *binary)
{
- GBinPart **parts; /* Parties d'élément binaire */
- size_t parts_count; /* Nombre de ces parties */
-
/* Détermination de l'identifiant */
/* déplacé
@@ -1165,33 +878,7 @@ void g_loaded_binary_analyse(GLoadedBinary *binary)
-
- if (binary->parts_count[BPM_ROUTINES] > 0)
- binary->model = BPM_ROUTINES;
-
-
- if (binary->parts[binary->model] != NULL)
- {
- parts = binary->parts[binary->model];
- parts_count = binary->parts_count[binary->model];
- }
- else
- {
- if (binary->parts[BPM_DEFAULT] != NULL)
- {
- parts = binary->parts[BPM_DEFAULT];
- parts_count = binary->parts_count[BPM_DEFAULT];
- }
- else
- {
- parts = g_exe_format_get_parts(binary->format, &parts_count);
- qsort(parts, parts_count, sizeof(GBinPart *), (__compar_fn_t)g_binary_part_compare);
- }
- }
-
- disassemble_binary(binary, parts, parts_count,
- &binary->instrs, &binary->disass_buffer,
- ack_completed_disassembly);
+ disassemble_binary(binary, &binary->instrs, &binary->disass_buffer, ack_completed_disassembly);
/* TODO : remme ! */
//ack_completed_disassembly(NULL, binary);
diff --git a/src/analysis/binary.h b/src/analysis/binary.h
index 8574f28..8ce64cb 100644
--- a/src/analysis/binary.h
+++ b/src/analysis/binary.h
@@ -141,13 +141,6 @@ bool g_loaded_binary_add_to_collection(GLoadedBinary *, DBFeatures, GDbItem *);
-/* Définit les parties de binaire à analyser. */
-
-void g_loaded_binary_set_parts(GLoadedBinary *, BinaryPartModel, GBinPart **, size_t);
-
-/* Fournit les parties de binaire analysées. */
-GBinPart ***g_loaded_binary_get_parts(const GLoadedBinary *, BinaryPartModel *, size_t **);
-
/* Lance l'analyse d'un élément binaire chargé. */
void g_loaded_binary_analyse(GLoadedBinary *);
diff --git a/src/analysis/disass/disassembler.c b/src/analysis/disass/disassembler.c
index 126c116..ac6eb5b 100644
--- a/src/analysis/disass/disassembler.c
+++ b/src/analysis/disass/disassembler.c
@@ -58,9 +58,6 @@ struct _GDelayedDisassembly
GLoadedBinary *binary; /* Destinataire final */
GExeFormat *format; /* Format du binaire représenté*/
- GBinPart **parts; /* Parties binaires à traiter */
- size_t count; /* Nombre de ces parties */
-
GArchInstruction **instrs; /* Instructions résultantes */
GCodeBuffer *buffer; /* Tampon pour le rendu */
@@ -81,7 +78,7 @@ static void g_delayed_disassembly_class_init(GDelayedDisassemblyClass *);
static void g_delayed_disassembly_init(GDelayedDisassembly *);
/* Crée une tâche de désassemblage différé. */
-static GDelayedDisassembly *g_delayed_disassembly_new(GLoadedBinary *, GBinPart **, size_t, GArchInstruction **, GCodeBuffer *);
+static GDelayedDisassembly *g_delayed_disassembly_new(GLoadedBinary *, GArchInstruction **, GCodeBuffer *);
/* Assure le désassemblage en différé. */
static void g_delayed_disassembly_process(GDelayedDisassembly *, GtkExtStatusBar *);
@@ -146,8 +143,6 @@ static void g_delayed_disassembly_init(GDelayedDisassembly *disass)
* *
* Paramètres : binary = binaire chargé en attente des résultats. *
* format = format du binaire représenté. *
-* parts = parties binaires à désassembler. *
-* count = nombre de parties à traiter. *
* instrs = emplacement pour la liste d'instructions. *
* buffer = tampon de sortie pour les instructions. *
* *
@@ -159,7 +154,7 @@ static void g_delayed_disassembly_init(GDelayedDisassembly *disass)
* *
******************************************************************************/
-static GDelayedDisassembly *g_delayed_disassembly_new(GLoadedBinary *binary, GBinPart **parts, size_t count, GArchInstruction **instrs, GCodeBuffer *buffer)
+static GDelayedDisassembly *g_delayed_disassembly_new(GLoadedBinary *binary, GArchInstruction **instrs, GCodeBuffer *buffer)
{
GDelayedDisassembly *result; /* Tâche à retourner */
@@ -168,9 +163,6 @@ static GDelayedDisassembly *g_delayed_disassembly_new(GLoadedBinary *binary, GBi
result->binary = binary;
result->format = g_loaded_binary_get_format(binary);
- result->parts = parts;
- result->count = count;
-
result->instrs = instrs;
result->buffer = buffer;
@@ -538,7 +530,7 @@ static void build_disass_prologue(GCodeBuffer *buffer, const char *filename, con
* *
******************************************************************************/
-void disassemble_binary(GLoadedBinary *binary, GBinPart **parts, size_t parts_count, GArchInstruction **instrs, GCodeBuffer **buffer, disassembly_ack_fc ack)
+void disassemble_binary(GLoadedBinary *binary, GArchInstruction **instrs, GCodeBuffer **buffer, disassembly_ack_fc ack)
{
const uint8_t *data; /* Données binaires brutes */
off_t length; /* Quantité de ces données */
@@ -550,7 +542,7 @@ void disassemble_binary(GLoadedBinary *binary, GBinPart **parts, size_t parts_co
data = g_loaded_binary_get_data(binary, &length);
build_disass_prologue(*buffer, g_loaded_binary_get_name(binary, true), data, length);
- disass = g_delayed_disassembly_new(binary, parts, parts_count, instrs, *buffer);
+ disass = g_delayed_disassembly_new(binary, instrs, *buffer);
g_signal_connect(disass, "work-completed", G_CALLBACK(ack), binary);
queue = get_work_queue();
diff --git a/src/analysis/disass/disassembler.h b/src/analysis/disass/disassembler.h
index 46bd3cc..4e459a1 100644
--- a/src/analysis/disass/disassembler.h
+++ b/src/analysis/disass/disassembler.h
@@ -26,7 +26,6 @@
#include "../binary.h"
-#include "../../format/part.h"
@@ -60,7 +59,7 @@ GType g_delayed_disassembly_get_type(void);
typedef void (* disassembly_ack_fc) (GDelayedDisassembly *, GLoadedBinary *);
/* Procède à la décompilation des routines d'un fichier donné. */
-void disassemble_binary(GLoadedBinary *, GBinPart **parts, size_t parts_count, GArchInstruction **, GCodeBuffer **, disassembly_ack_fc);
+void disassemble_binary(GLoadedBinary *, GArchInstruction **, GCodeBuffer **, disassembly_ack_fc);
diff --git a/src/analysis/disass/macro.c b/src/analysis/disass/macro.c
index 9addf1e..3745f25 100644
--- a/src/analysis/disass/macro.c
+++ b/src/analysis/disass/macro.c
@@ -25,6 +25,7 @@
#include <malloc.h>
+#include <stdlib.h>
#include <string.h>
diff --git a/src/arch/processor-int.h b/src/arch/processor-int.h
index 23a6d60..2b91b36 100644
--- a/src/arch/processor-int.h
+++ b/src/arch/processor-int.h
@@ -38,7 +38,6 @@
#include "operand.h" /* TODO: AsmSyntax ? */
#include "instruction.h"
#include "processor.h"
-#include "../format/exe_format.h"
diff --git a/src/dialogs/Makefile.am b/src/dialogs/Makefile.am
index 7be1fd6..9adb0f6 100644
--- a/src/dialogs/Makefile.am
+++ b/src/dialogs/Makefile.am
@@ -3,7 +3,6 @@ noinst_LTLIBRARIES = libdialogs.la
libdialogs_la_SOURCES = \
about.h about.c \
- binparts.h binparts.c \
export.h export.c \
goto.h goto.c \
plugins.h plugins.c \
diff --git a/src/dialogs/binparts.c b/src/dialogs/binparts.c
deleted file mode 100644
index 2d86432..0000000
--- a/src/dialogs/binparts.c
+++ /dev/null
@@ -1,779 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * binparts.h - boîte de dialogue permettant une sélection des sections
- *
- * Copyright (C) 2009-2014 Cyrille Bagard
- *
- * This file is part of Chrysalide.
- *
- * 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 "binparts.h"
-
-
-#include <i18n.h>
-
-
-#include <stdio.h>
-
-
-#include "../format/format.h"
-#include "../gtkext/easygtk.h"
-
-
-
-
-/* Colonnes de la liste des symboles */
-typedef enum _PartsColumn
-{
- PTC_ACTIVE, /* Zone de code active ? */
- PTC_NAME, /* Désignation humaine */
- PTC_START, /* Adresse de départ */
- PTC_END, /* Adresse d'arrivée (exclue) */
-
- PTC_COUNT /* Nombre de colonnes */
-
-} PartsColumn;
-
-
-/* Mémoire d'un modèle */
-typedef struct _parts_model
-{
- gboolean *selected; /* Sélection ou non de parties */
- size_t count; /* Qté. de prises en compte */
-
-} parts_model;
-
-
-/* Sélectionne ou non tous les éléments de la liste courante. */
-static void select_all_items_or_none(GtkButton *, GObject *);
-
-/* Sauvegarde l'état courant des sélections et clôt la fenêtre. */
-static void save_current_selection(GtkButton *, GObject *);
-
-/* Ferme la fenêtre de dialogue. */
-static void close_editor(GtkButton *, GtkWidget *);
-
-/* Charge les parties courantes d'un binaire donné. */
-static void load_binary_current_parts(GLoadedBinary *binary, GObject *ref);
-
-/* Affiche les parties désassemblées par défaut. */
-static void load_default_parts(GObject *);
-
-/* Affiche les parties désassemblées selon les routines. */
-static void load_routines_parts(GObject *);
-
-
-
-/* Réagit à un changement de modèle. */
-static void on_model_change(GtkComboBox *, GObject *);
-
-/* Réagit à un changement de sélection de partie. */
-static void on_part_selection_toggle(GtkCellRendererToggle *, gchar *, GObject *);
-
-
-
-/******************************************************************************
-* *
-* Paramètres : binary = informations sur le binaire actuellement ouvert. *
-* parent = fenêtre parente à surpasser. *
-* *
-* Description : Construit la fenêtre de sélection des sections. *
-* *
-* Retour : Adresse de la fenêtre mise en place. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GtkWidget *create_sections_dialog(GLoadedBinary *binary, GtkWindow *parent)
-{
- GtkWidget *result; /* Fenêtre à renvoyer */
- GObject *ref; /* Espace de référencements */
-
-
-
-
-
- GtkWidget *vbox1;
-
-
-
- GtkWidget *vbox2;
- GtkWidget *hbox2;
- GtkWidget *label; /* Etiquette à afficher */
-
- GtkWidget *comboboxentry;
- GtkWidget *hbox3;
- GtkWidget *scrolledwindow1;
-
- GtkTreeStore *store; /* Modèle de gestion */
- GtkWidget *treeview; /* Affichage de la liste */
- GtkCellRenderer *renderer; /* Moteur de rendu de colonne */
- GtkTreeViewColumn *column; /* Colonne de la liste */
-
-
- GtkWidget *vbuttonbox1;
- GtkWidget *hbuttonbox1;
-
- GtkWidget *button; /* Bouton de commande */
- GtkWidget *sep; /* Barre de séparation */
-
- result = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_widget_set_size_request(result, 600, 400);
- gtk_container_set_border_width(GTK_CONTAINER(result), 8);
- gtk_window_set_title(GTK_WINDOW(result), _("Content to display"));
- gtk_window_set_transient_for(GTK_WINDOW(result), parent);
- gtk_window_set_default_size(GTK_WINDOW(result), 600, 400);
- gtk_window_set_type_hint(GTK_WINDOW(result), GDK_WINDOW_TYPE_HINT_DIALOG);
-
- ref= G_OBJECT(result);
- g_object_set_data(ref, "binary", binary);
-
- vbox1 = gtk_vbox_new(FALSE, 8);
- gtk_widget_show(vbox1);
- gtk_container_add(GTK_CONTAINER(result), vbox1);
-
- vbox2 = gtk_vbox_new(FALSE, 8);
- gtk_widget_show(vbox2);
- gtk_container_add(GTK_CONTAINER(vbox1), vbox2);
-
-
-
- hbox2 = gtk_hbox_new(FALSE, 8);
- gtk_widget_show(hbox2);
- gtk_box_pack_start(GTK_BOX(vbox2), hbox2, FALSE, FALSE, 0);
-
- label = qck_create_label(NULL, NULL, _("Model :"));
- gtk_box_pack_start(GTK_BOX(hbox2), label, FALSE, FALSE, 0);
-
- comboboxentry = qck_create_combobox(ref, "models", G_CALLBACK(NULL), NULL);
- gtk_box_pack_start(GTK_BOX(hbox2), comboboxentry, TRUE, TRUE, 0);
-
-
- button = qck_create_button_with_img(NULL, NULL, "gtk-add", G_CALLBACK(NULL), NULL);
- gtk_widget_set_sensitive(button, FALSE);
- gtk_box_pack_start(GTK_BOX(hbox2), button, FALSE, FALSE, 0);
-
- button = qck_create_button_with_img(NULL, NULL, "gtk-remove", G_CALLBACK(NULL), NULL);
- gtk_widget_set_sensitive(button, FALSE);
- gtk_box_pack_start(GTK_BOX(hbox2), button, FALSE, FALSE, 0);
-
-
-
-
- hbox3 = gtk_hbox_new(FALSE, 8);
- gtk_widget_show(hbox3);
- gtk_box_pack_start(GTK_BOX(vbox2), hbox3, TRUE, TRUE, 0);
-
- scrolledwindow1 = gtk_scrolled_window_new(NULL, NULL);
- gtk_widget_show(scrolledwindow1);
- gtk_box_pack_start(GTK_BOX(hbox3), scrolledwindow1, TRUE, TRUE, 0);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow1), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
- gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolledwindow1), GTK_SHADOW_IN);
-
-
-
-
-
-
- store = gtk_tree_store_new(PTC_COUNT, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
- g_object_set_data(ref, "store", store);
-
- treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
- gtk_widget_show(treeview);
- gtk_container_add(GTK_CONTAINER(scrolledwindow1), treeview);
-
- g_object_unref(G_OBJECT(store));
- /*
- column = gtk_tree_view_column_new();
- gtk_tree_view_column_set_visible(column, FALSE);
- gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
- gtk_tree_view_set_expander_column(GTK_TREE_VIEW(treeview), column);
- */
-
- renderer = gtk_cell_renderer_toggle_new();
- gtk_cell_renderer_toggle_set_activatable(GTK_CELL_RENDERER_TOGGLE(renderer), TRUE);
- column = gtk_tree_view_column_new_with_attributes(_("Active"), renderer, "active", PTC_ACTIVE, NULL);
- gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
- g_signal_connect(G_OBJECT(renderer), "toggled", G_CALLBACK(on_part_selection_toggle), ref);
-
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes(_("Name"), renderer, "text", PTC_NAME, NULL);
- gtk_tree_view_column_set_expand(column, TRUE);
- gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
-
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes(_("Start"), renderer, "text", PTC_START, NULL);
- gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
-
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes(_("End"), renderer, "text", PTC_END, NULL);
- gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);
-
-
-
-
-
-
- /* Boutons d'édition de la liste */
-
- vbuttonbox1 = gtk_vbutton_box_new();
- gtk_widget_show(vbuttonbox1);
- gtk_box_pack_start(GTK_BOX(hbox3), vbuttonbox1, FALSE, FALSE, 0);
- gtk_button_box_set_layout(GTK_BUTTON_BOX(vbuttonbox1), GTK_BUTTONBOX_SPREAD);
-
-
- button = qck_create_button_with_img(NULL, NULL, "gtk-add", G_CALLBACK(select_all_items_or_none), ref);
- gtk_container_add(GTK_CONTAINER(vbuttonbox1), button);
-
- g_object_set_data(G_OBJECT(button), "all", button);
-
- button = qck_create_button_with_img(NULL, NULL, "gtk-remove", G_CALLBACK(select_all_items_or_none), ref);
- gtk_container_add(GTK_CONTAINER(vbuttonbox1), button);
-
- sep = gtk_hseparator_new();
- gtk_widget_show(sep);
- gtk_container_add(GTK_CONTAINER(vbuttonbox1), sep);
-
- button = qck_create_button_with_img(NULL, NULL, "gtk-add", G_CALLBACK(NULL), NULL);
- gtk_widget_set_sensitive(button, FALSE);
- gtk_container_add(GTK_CONTAINER(vbuttonbox1), button);
-
- button = qck_create_button_with_img(NULL, NULL, "gtk-remove", G_CALLBACK(NULL), NULL);
- gtk_widget_set_sensitive(button, FALSE);
- gtk_container_add(GTK_CONTAINER(vbuttonbox1), button);
-
-
-
-
-
- hbuttonbox1 = gtk_hbutton_box_new();
- gtk_widget_show(hbuttonbox1);
- gtk_box_pack_start(GTK_BOX(vbox1), hbuttonbox1, FALSE, FALSE, 0);
- gtk_button_box_set_layout(GTK_BUTTON_BOX(hbuttonbox1), GTK_BUTTONBOX_END);
-
-
- /* Boutons de contrôle principaux */
-
- button = qck_create_button(NULL, NULL, _("_Ok"), G_CALLBACK(save_current_selection), ref);
- gtk_container_add(GTK_CONTAINER(hbuttonbox1), button);
-
- button = qck_create_button(NULL, NULL, _("_Cancel"), G_CALLBACK(close_editor), result);
- gtk_container_add(GTK_CONTAINER(hbuttonbox1), button);
-
- /* Actualisation de l'interface */
-
- g_signal_connect(G_OBJECT(comboboxentry), "changed", G_CALLBACK(on_model_change), ref);
-
- gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(comboboxentry), _("Default"));
- gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(comboboxentry), _("Routines"));
- gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(comboboxentry), _("User"));
-
- load_binary_current_parts(binary, ref);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : button = bouton d'édition de la sélection. *
-* ref = espace de référencement principal. *
-* *
-* Description : Sélectionne ou non tous les éléments de la liste courante. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void select_all_items_or_none(GtkButton *button, GObject *ref)
-{
- gboolean state; /* Etat de sélection à donner */
- GtkTreeModel *model; /* Modèle de représentation */
- GtkTreeIter iter; /* Point de modification */
-
- state = (g_object_get_data(G_OBJECT(button), "all") != NULL);
-
- model = GTK_TREE_MODEL(g_object_get_data(ref, "store"));
-
- if (gtk_tree_model_get_iter_first(model, &iter))
- do
- gtk_tree_store_set(GTK_TREE_STORE(model), &iter,
- PTC_ACTIVE, state,
- -1);
- while (gtk_tree_model_iter_next(model, &iter));
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : button = bouton 'OK'. *
-* ref = espace de référencement principal. *
-* *
-* Description : Sauvegarde l'état courant des sélections et clôt la fenêtre. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void save_current_selection(GtkButton *button, GObject *ref)
-{
-
-
-
-
-
-
-
- GLoadedBinary *binary; /* Binaire à traiter */
-
- GExeFormat *format; /* Format associé au binaire */
- GArchProcessor *proc; /* Architecture utilisée */
-
-
- GBinPart **parts; /* Parcelles à désassembler */
- size_t parts_count; /* Quantité de ces parcelles */
- GBinPart *part; /* Nouvelle partie à lister */
-
-
- GBinRoutine **routines; /* Liste des routines trouvées */
- size_t routines_count; /* Nombre de ces routines */
- parts_model *model; /* Mémoire du modèle */
- size_t i; /* Boucle de parcours */
- off_t offset; /* Position dans le binaire */
-
-
- binary = G_LOADED_BINARY(g_object_get_data(ref, "binary"));
-
- format = g_loaded_binary_get_format(binary);
- proc = get_arch_processor_from_format(format);
-
-
-
-
- /* Routines */
-
- parts = NULL;
- parts_count = 0;
-
- routines = g_binary_format_get_routines(G_BIN_FORMAT(format), &routines_count);
- qsort(routines, routines_count, sizeof(GBinRoutine *), g_binary_routine_compare);
-
- model = (parts_model *)g_object_get_data(ref, "routines_model");
-
- for (i = 0; i < routines_count; i++)
- {
- if (!model->selected[i]) continue;
-
- part = g_binary_part_new();
-
- g_binary_part_set_name(part, g_binary_routine_get_name(routines[i]));
-
- g_exe_format_translate_address_into_offset(format,
- g_binary_routine_get_address(routines[i]),
- &offset);
-
- g_binary_part_set_values(part, offset,
- g_binary_routine_get_size(routines[i]),
- g_binary_routine_get_address(routines[i]));
-
- parts = (GBinPart **)realloc(parts, ++parts_count * sizeof(GBinPart *));
- parts[parts_count - 1] = part;
-
- }
-
- g_loaded_binary_set_parts(binary, BPM_ROUTINES, parts, parts_count);
-
-
-
-
-
-
-
-
- /* Fin */
-
- gtk_widget_destroy(GTK_WIDGET(ref));
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : button = bouton 'Annuler'. *
-* widget = adresse de la fenêtre de l'éditeur à fermer. *
-* *
-* Description : Ferme la fenêtre de dialogue. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void close_editor(GtkButton *button, GtkWidget *widget)
-{
- gtk_widget_destroy(widget);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : binary = informations sur le binaire actuellement ouvert. *
-* ref = espace de référencement principal. *
-* *
-* Description : Charge les parties courantes d'un binaire donné. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void load_binary_current_parts(GLoadedBinary *binary, GObject *ref)
-{
- GtkTreeModel *store; /* Modèle de représentation */
- GBinPart ***list; /* Tableau de parties choisies */
- BinaryPartModel model; /* Sélection courante */
- size_t *count; /* Taille de chaque liste */
- unsigned int i; /* Boucle de parcours #1 */
- parts_model *parts; /* Liste de sélection courante */
- size_t j; /* Boucle de parcours #2 */
- GtkTreeIter iter; /* Lieu de lecture d'adresse */
- char path[11 /* UINT_MAX */]; /* Chemin d'accès pour GTK */
- gchar *value; /* Valeur d'adresse présentée */
- vmpa_t addr_dlg; /* Adresse côté local */
- size_t k; /* Boucle de parcours #3 */
- vmpa_t addr_bin; /* Adresse côté binaire */
- GtkComboBox *combo; /* Liste de tous les modèles */
-
- /* Lecture des sélections courantes */
-
- store = GTK_TREE_MODEL(g_object_get_data(ref, "store"));
-
- list = g_loaded_binary_get_parts(binary, &model, &count);
-
- for (i = 0; i < (BPM_COUNT - 1 /* TODO*/); i++)
- {
- gtk_tree_store_clear(GTK_TREE_STORE(store));
-
- switch (i)
- {
- case BPM_DEFAULT:
- load_default_parts(ref);
- parts = (parts_model *)g_object_get_data(ref, "default_model");
- break;
- case BPM_ROUTINES:
- load_routines_parts(ref);
- parts = (parts_model *)g_object_get_data(ref, "routines_model");
- break;
- case BPM_USER:
- //parts =
- break;
- }
-
- for (j = 0; j < parts->count; j++)
- {
- snprintf(path, 11, "%u", j);
-
- gtk_tree_model_get_iter_from_string(store, &iter, path);
- gtk_tree_model_get(store, &iter, PTC_START, &value, -1);
- addr_dlg = strtoll(value, NULL, 16);
- g_free(value);
-
- for (k = 0; k < count[i]; k++)
- {
- g_binary_part_get_values(list[i][k], NULL, NULL, &addr_bin);
- if (addr_bin == addr_dlg) break;
- }
-
- parts->selected[j] = (count[i] == 0 || k < count[i]);
-
- }
-
- }
-
- /* Sélection courante */
- combo = GTK_COMBO_BOX(g_object_get_data(ref, "models"));
- gtk_combo_box_set_active(combo, model);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : ref = espace de référencement principal. *
-* *
-* Description : Affiche les parties désassemblées par défaut. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void load_default_parts(GObject *ref)
-{
- GLoadedBinary *binary; /* Binaire à traiter */
- GtkTreeStore *store; /* Modèle de gestion */
- GExeFormat *format; /* Format associé au binaire */
- GArchProcessor *proc; /* Architecture utilisée */
- GBinPart **parts; /* Parties d'élément binaire */
- size_t parts_count; /* Nombre de ces parties */
- parts_model *model; /* Mémoire du modèle */
- bool exist; /* Mémoire présente ? */
- size_t i; /* Boucle de parcours */
- off_t size; /* Taille de la partie */
- vmpa_t addr; /* Adresse de départ */
- char start[VMPA_MAX_SIZE]; /* Version humainement lisible */
- char end[VMPA_MAX_SIZE]; /* Version humainement lisible */
- GtkTreeIter iter; /* Point d'insertion */
-
- binary = G_LOADED_BINARY(g_object_get_data(ref, "binary"));
- store = GTK_TREE_STORE(g_object_get_data(ref, "store"));
-
- format = g_loaded_binary_get_format(binary);
- proc = get_arch_processor_from_format(format);
-
- parts = g_exe_format_get_parts(format, &parts_count);
- qsort(parts, parts_count, sizeof(GBinPart *), g_binary_part_compare);
-
- model = (parts_model *)g_object_get_data(ref, "default_model");
- exist = (model != NULL);
-
- if (!exist)
- {
- model = (parts_model *)calloc(1, sizeof(parts_model));
- g_object_set_data(ref, "default_model", model);
-
- model->selected = (gboolean *)calloc(parts_count, sizeof(gboolean));
- model->count = parts_count;
-
- }
-
- for (i = 0; i < parts_count; i++)
- {
- g_binary_part_get_values(parts[i], NULL, &size, &addr);
-
- vmpa_to_string(addr, g_arch_processor_get_memory_size(proc), start);
- vmpa_to_string(addr + size, g_arch_processor_get_memory_size(proc), end);
-
- if (!exist)
- model->selected[i] = TRUE;
-
- gtk_tree_store_append(store, &iter, NULL);
- gtk_tree_store_set(store, &iter,
- PTC_ACTIVE, model->selected[i],
- PTC_NAME, g_binary_part_get_name(parts[i]),
- PTC_START, start,
- PTC_END, end,
- -1);
-
- }
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : ref = espace de référencement principal. *
-* *
-* Description : Affiche les parties désassemblées selon les routines. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void load_routines_parts(GObject *ref)
-{
- GLoadedBinary *binary; /* Binaire à traiter */
- GtkTreeStore *store; /* Modèle de gestion */
- GExeFormat *format; /* Format associé au binaire */
- GArchProcessor *proc; /* Architecture utilisée */
- GBinRoutine **routines; /* Liste des routines trouvées */
- size_t routines_count; /* Nombre de ces routines */
- parts_model *model; /* Mémoire du modèle */
- bool exist; /* Mémoire présente ? */
- size_t i; /* Boucle de parcours */
- vmpa_t addr; /* Adresse à transcrire */
- char start[VMPA_MAX_SIZE]; /* Version humainement lisible */
- char end[VMPA_MAX_SIZE]; /* Version humainement lisible */
- GtkTreeIter iter; /* Point d'insertion */
-
- binary = G_LOADED_BINARY(g_object_get_data(ref, "binary"));
- store = GTK_TREE_STORE(g_object_get_data(ref, "store"));
-
- format = g_loaded_binary_get_format(binary);
- proc = get_arch_processor_from_format(format);
-
- routines = g_binary_format_get_routines(G_BIN_FORMAT(format), &routines_count);
- qsort(routines, routines_count, sizeof(GBinRoutine *), g_binary_routine_compare);
-
- model = (parts_model *)g_object_get_data(ref, "routines_model");
- exist = (model != NULL);
-
- if (!exist)
- {
- model = (parts_model *)calloc(1, sizeof(parts_model));
- g_object_set_data(ref, "routines_model", model);
-
- model->selected = (gboolean *)calloc(routines_count, sizeof(gboolean));
- model->count = routines_count;
-
- }
-
- for (i = 0; i < routines_count; i++)
- {
- addr = g_binary_routine_get_address(routines[i]);
- vmpa_to_string(addr, g_arch_processor_get_memory_size(proc), start);
-
- addr += g_binary_routine_get_size(routines[i]);
- vmpa_to_string(addr, g_arch_processor_get_memory_size(proc), end);
-
- if (!exist)
- model->selected[i] = TRUE;
-
- gtk_tree_store_append(store, &iter, NULL);
- gtk_tree_store_set(store, &iter,
- PTC_ACTIVE, model->selected[i],
- PTC_NAME, g_binary_routine_get_name(routines[i]),
- PTC_START, start,
- PTC_END, end,
- -1);
-
- }
-
-}
-
-
-
-
-
-
-
-
-
-
-/******************************************************************************
-* *
-* Paramètres : combo = liste des modèles proposés. *
-* ref = espace de référencement principal. *
-* *
-* Description : Réagit à un changement de modèle. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void on_model_change(GtkComboBox *combo, GObject *ref)
-{
- gint index; /* Indice du nouveau modèle */
- GtkTreeStore *store; /* Modèle de gestion */
-
- store = GTK_TREE_STORE(g_object_get_data(ref, "store"));
- gtk_tree_store_clear(store);
-
- index = gtk_combo_box_get_active(combo);
-
- switch (index)
- {
- case BPM_DEFAULT:
- load_default_parts(ref);
- break;
-
- case BPM_ROUTINES:
- load_routines_parts(ref);
- break;
-
- case BPM_USER:
- break;
-
- }
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : renderer = cellule de rendu à mettre à jour. *
-* path = chemin menant à la ligne concernée. *
-* ref = espace de référencement principal. *
-* *
-* Description : Réagit à un changement de sélection de partie. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void on_part_selection_toggle(GtkCellRendererToggle *renderer, gchar *path, GObject *ref)
-{
- GtkTreeModel *model; /* Modèle de représentation */
- GtkTreeIter iter; /* Lieu de la mise à jour */
- gboolean state; /* Etat de la sélection */
- GtkComboBox *combo; /* Liste de tous les modèles */
- gint index; /* Indice du modèle courant */
- parts_model *list; /* Mémorisation des sélections */
-
-
- printf("path :: %s\n", path);
-
- model = GTK_TREE_MODEL(g_object_get_data(ref, "store"));
-
- if (gtk_tree_model_get_iter_from_string(model, &iter, path))
- {
- gtk_tree_model_get(model, &iter, PTC_ACTIVE, &state, -1);
-
- combo = GTK_COMBO_BOX(g_object_get_data(ref, "models"));
- index = gtk_combo_box_get_active(combo);
-
- switch (index)
- {
- case BPM_DEFAULT:
- list = (parts_model *)g_object_get_data(ref, "default_model");
- break;
-
- case BPM_ROUTINES:
- list = (parts_model *)g_object_get_data(ref, "routines_model");
- break;
-
- case BPM_USER:
- break;
-
- }
-
- list->selected[atoi(path)] = !state;
-
- gtk_tree_store_set(GTK_TREE_STORE(model), &iter,
- PTC_ACTIVE, !state,
- -1);
-
- }
-
-}
diff --git a/src/dialogs/binparts.h b/src/dialogs/binparts.h
deleted file mode 100644
index 6cdb11e..0000000
--- a/src/dialogs/binparts.h
+++ /dev/null
@@ -1,40 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * binparts.h - prototypes pour la boîte de dialogue permettant une sélection des sections
- *
- * Copyright (C) 2009-2012 Cyrille Bagard
- *
- * This file is part of Chrysalide.
- *
- * 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 _DIALOGS_BINPARTS_H
-#define _DIALOGS_BINPARTS_H
-
-
-#include <gtk/gtk.h>
-
-
-#include "../analysis/binary.h"
-
-
-
-/* Construit la fenêtre de sélection des sections. */
-GtkWidget *create_sections_dialog(GLoadedBinary *, GtkWindow *);
-
-
-
-#endif /* _DIALOGS_BINPARTS_H */
diff --git a/src/format/Makefile.am b/src/format/Makefile.am
index 1c06de9..b0fda82 100644
--- a/src/format/Makefile.am
+++ b/src/format/Makefile.am
@@ -6,7 +6,6 @@ libformat_la_SOURCES = \
executable.h executable.c \
format-int.h \
format.h format.c \
- part.h part.c \
symbol.h symbol.c
# libformat_la_SOURCES = \
diff --git a/src/format/dex/class.c b/src/format/dex/class.c
index 19c004a..b866cd7 100644
--- a/src/format/dex/class.c
+++ b/src/format/dex/class.c
@@ -320,7 +320,7 @@ GDexMethod *g_dex_class_get_method(const GDexClass *class, bool virtual, size_t
* Remarques : - *
* *
******************************************************************************/
-
+#if 0
GBinPart **g_dex_class_get_parts(const GDexClass *class, GBinPart **parts, size_t *count)
{
size_t i; /* Boucle de parcours */
@@ -347,7 +347,7 @@ GBinPart **g_dex_class_get_parts(const GDexClass *class, GBinPart **parts, size_
return parts;
}
-
+#endif
diff --git a/src/format/dex/class.h b/src/format/dex/class.h
index 0eea7b4..8125b91 100644
--- a/src/format/dex/class.h
+++ b/src/format/dex/class.h
@@ -61,7 +61,7 @@ size_t g_dex_class_count_methods(const GDexClass *, bool);
GDexMethod *g_dex_class_get_method(const GDexClass *, bool, size_t);
/* Fournit les références aux zones binaires à analyser. */
-GBinPart **g_dex_class_get_parts(const GDexClass *, GBinPart **, size_t *);
+//GBinPart **g_dex_class_get_parts(const GDexClass *, GBinPart **, size_t *);
/* Retrouve si possible la méthode associée à une adresse. */
GDexMethod *g_dex_class_find_method_by_address(const GDexClass *, vmpa_t);
diff --git a/src/format/dex/dex.c b/src/format/dex/dex.c
index 94ec34a..f66f056 100755
--- a/src/format/dex/dex.c
+++ b/src/format/dex/dex.c
@@ -55,7 +55,7 @@ static void g_dex_format_decompile(const GDexFormat *, GCodeBuffer *, const char
static FormatTargetMachine g_dex_format_get_target_machine(const GDexFormat *);
/* Fournit les références aux zones binaires à analyser. */
-static GBinPart **g_dex_format_get_parts(const GDexFormat *, size_t *);
+//static GBinPart **g_dex_format_get_parts(const GDexFormat *, size_t *);
/* Fournit la position correspondant à une adresse virtuelle. */
static bool g_dex_format_translate_address_into_offset(const GDexFormat *, vmpa_t, off_t *);
@@ -139,7 +139,6 @@ static void g_dex_format_init(GDexFormat *format)
exe_format = G_EXE_FORMAT(format);
exe_format->get_machine = (get_target_machine_fc)g_dex_format_get_target_machine;
- exe_format->get_parts = (get_parts_fc)g_dex_format_get_parts;
exe_format->translate_addr = (translate_addr_fc)g_dex_format_translate_address_into_offset;
exe_format->translate_off = (translate_off_fc)g_dex_format_translate_offset_into_address;
@@ -362,7 +361,7 @@ static FormatTargetMachine g_dex_format_get_target_machine(const GDexFormat *for
* Remarques : - *
* *
******************************************************************************/
-
+#if 0
static GBinPart **g_dex_format_get_parts(const GDexFormat *format, size_t *count)
{
GBinPart **result; /* Tableau à retourner */
@@ -377,7 +376,7 @@ static GBinPart **g_dex_format_get_parts(const GDexFormat *format, size_t *count
return result;
}
-
+#endif
/******************************************************************************
* *
diff --git a/src/format/dex/method.c b/src/format/dex/method.c
index 22e7039..c721cea 100644
--- a/src/format/dex/method.c
+++ b/src/format/dex/method.c
@@ -254,7 +254,7 @@ GBinRoutine *g_dex_method_get_routine(const GDexMethod *method)
* Remarques : - *
* *
******************************************************************************/
-
+#if 0
GBinPart *g_dex_method_as_part(const GDexMethod *method)
{
GBinPart *result; /* Instance à retourner */
@@ -272,7 +272,7 @@ GBinPart *g_dex_method_as_part(const GDexMethod *method)
return result;
}
-
+#endif
/******************************************************************************
* *
diff --git a/src/format/dex/method.h b/src/format/dex/method.h
index 472e42d..79e3077 100644
--- a/src/format/dex/method.h
+++ b/src/format/dex/method.h
@@ -32,8 +32,6 @@
#include "dex_def.h"
-#include "../part.h"
-
#define G_TYPE_DEX_METHOD (g_dex_method_get_type())
#define G_DEX_METHOD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), G_TYPE_DEX_METHOD, GDexMethod))
@@ -81,7 +79,7 @@ const code_item *g_dex_method_get_dex_body(const GDexMethod *);
GBinRoutine *g_dex_method_get_routine(const GDexMethod *);
/* Fournit la zone binaire correspondant à la méthode. */
-GBinPart *g_dex_method_as_part(const GDexMethod *);
+//GBinPart *g_dex_method_as_part(const GDexMethod *);
/* Indique la position de la méthode au sein du binaire. */
off_t g_dex_method_get_offset(const GDexMethod *);
diff --git a/src/format/elf/elf.c b/src/format/elf/elf.c
index 00af26d..b659dd7 100644
--- a/src/format/elf/elf.c
+++ b/src/format/elf/elf.c
@@ -62,9 +62,6 @@ static FormatTargetMachine g_elf_format_get_target_machine(const GElfFormat *);
/* Etend la définition des portions au sein d'un binaire. */
static void g_elf_format_refine_portions(const GElfFormat *, GBinPortion *);
-/* Fournit les références aux zones binaires à analyser. */
-static GBinPart **g_elf_format_get_parts(const GElfFormat *, size_t *);
-
/* Fournit la position correspondant à une adresse virtuelle. */
static bool g_elf_format_translate_address_into_offset(const GElfFormat *, vmpa_t, off_t *);
@@ -143,7 +140,6 @@ static void g_elf_format_init(GElfFormat *format)
exe_format->get_machine = (get_target_machine_fc)g_elf_format_get_target_machine;
exe_format->refine_portions = (refine_portions_fc)g_elf_format_refine_portions;
- exe_format->get_parts = (get_parts_fc)g_elf_format_get_parts;
exe_format->translate_addr = (translate_addr_fc)g_elf_format_translate_address_into_offset;
exe_format->translate_off = (translate_off_fc)g_elf_format_translate_offset_into_address;
@@ -393,104 +389,6 @@ static void g_elf_format_refine_portions(const GElfFormat *format, GBinPortion *
/******************************************************************************
* *
-* Paramètres : format = informations chargées à consulter. *
-* count = quantité de zones listées. [OUT] *
-* *
-* Description : Fournit les références aux zones binaires à analyser. *
-* *
-* Retour : Zones binaires à analyser. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static GBinPart **g_elf_format_get_parts(const GElfFormat *format, size_t *count)
-{
- GBinPart **result; /* Tableau à retourner */
- uint16_t i; /* Boucle de parcours */
- elf_shdr strings; /* Section des descriptions */
- bool has_strings; /* Section trouvée ? */
- elf_shdr section; /* En-tête de section ELF */
- GBinPart *part; /* Partie à intégrer à la liste*/
- const char *name; /* Nom trouvé ou NULL */
- off_t offset; /* Début de part de programme */
- elf_phdr phdr; /* En-tête de programme ELF */
-
- result = NULL;
- *count = 0;
-
- has_strings = find_elf_section_by_index(format, ELF_HDR(format, format->header, e_shstrndx), &strings);
-
- /* Première tentative : les sections */
-
- for (i = 0; i < ELF_HDR(format, format->header, e_shnum); i++)
- {
- if (!find_elf_section_by_index(format, i, &section))
- continue;
-
- if (ELF_SHDR(format, section, sh_flags) & SHF_EXECINSTR)
- {
- part = g_binary_part_new();
-
- if (has_strings)
- {
- name = extract_name_from_elf_string_section(format, &strings,
- ELF_SHDR(format, section, sh_name));
-
- if (name != NULL)
- g_binary_part_set_name(part, name);
-
- }
-
- g_binary_part_set_values(part,
- ELF_SHDR(format, section, sh_offset),
- ELF_SHDR(format, section, sh_size),
- ELF_SHDR(format, section, sh_addr));
-
- result = (GBinPart **)realloc(result, ++(*count) * sizeof(GBinPart *));
- result[*count - 1] = part;
-
- }
-
- }
-
- /* En désespoir de cause, on se rabbat sur les parties de programme directement */
-
- if (*count == 0)
- for (i = 0; i < ELF_HDR(format, format->header, e_phnum); i++)
- {
- offset = ELF_HDR(format, format->header, e_phoff)
- + ELF_HDR(format, format->header, e_phentsize) * i;
-
- if (!read_elf_program_header(format, &offset, &phdr))
- continue;
-
- if (ELF_PHDR(format, phdr, p_flags) & PF_X)
- {
- part = g_binary_part_new();
-
- /* TODO : nom */
-
- g_binary_part_set_values(part,
- ELF_PHDR(format, phdr, p_offset),
- ELF_PHDR(format, phdr, p_filesz),
- ELF_PHDR(format, phdr, p_vaddr));
-
- result = (GBinPart **)realloc(result, ++(*count) * sizeof(GBinPart *));
- result[*count - 1] = part;
-
- }
-
- }
-
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
* Paramètres : format = description de l'exécutable à consulter. *
* addr = adresse virtuelle à retrouver. *
* pos = position correspondante. [OUT] *
diff --git a/src/format/exe_format-int.h b/src/format/exe_format-int.h
deleted file mode 100644
index 868e86c..0000000
--- a/src/format/exe_format-int.h
+++ /dev/null
@@ -1,100 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * exe_format-int.h - prototypes utiles aux formats d'exécutables
- *
- * Copyright (C) 2008-2012 Cyrille Bagard
- *
- * This file is part of Chrysalide.
- *
- * 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 _FORMAT_EXE_FORMAT_INT_H
-#define _FORMAT_EXE_FORMAT_INT_H
-
-
-#include "exe_format.h"
-
-
-
-/* ------------------------ MANIPULATION DES PARTIES DE CODE ------------------------ */
-
-
-/* Description d'une partie binaire */
-struct _bin_part
-{
- char *name; /* Désignation humaine */
-
- off_t offset; /* Position physique */
- off_t size; /* Taille de la partie */
- uint64_t voffset; /* Adresse virtuelle éventuelle*/
-
-};
-
-
-
-
-
-
-/* Fournit l'adresse mémoire du point d'entrée du programme. */
-typedef uint64_t (* get_entry_point_fc) (const exe_format *);
-
-/* Indique le type d'architecture visée par le format. */
-typedef FormatTargetMachine (* get_target_machine_fc) (const exe_format *);
-
-/* Fournit les références aux zones de code à analyser. */
-typedef bin_part ** (* get_def_parts_fc) (const exe_format *, size_t *);
-
-/* Recherche une section donnée au sein de binaire. */
-typedef bool (* find_section_fc) (const exe_format *, const char *, off_t *, off_t *, uint64_t *);
-
-/* Récupère tous les symboles présents dans le contenu binaire. */
-typedef size_t (* get_symbols_fc) (const exe_format *, char ***, SymbolType **, uint64_t **);
-
-/* Récupère tous les symboles présents dans le contenu binaire. */
-typedef size_t (* get_resolved_fc) (const exe_format *, char ***, ResolvedType **, uint64_t **);
-
-/* Recherche le symbole correspondant à une adresse. */
-typedef bool (* resolve_symbol_fc) (const exe_format *, char **, SymbolType *, vmpa_t *);
-
-/* Fournit le prototype de toutes les routines détectées. */
-typedef GBinRoutine ** (* get_all_routines_fc) (const exe_format *, size_t *);
-
-
-/* Support générique d'un format d'exécutable */
-struct _exe_format
-{
- const uint8_t *content; /* Contenu binaire à étudier */
- off_t length; /* Taille de ce contenu */
-
- get_entry_point_fc get_entry_point; /* Obtention du point d'entrée */
- get_target_machine_fc get_target_machine; /* Architecture ciblée */
- get_def_parts_fc get_def_parts; /* Liste des parties de code */
- find_section_fc find_section; /* Recherche d'une section */
- get_symbols_fc get_symbols; /* Liste des symboles présents */
- get_resolved_fc get_resolved; /* Liste des éléments présents */
- resolve_symbol_fc resolve_symbol; /* Recherche de symboles */
- get_all_routines_fc get_all_routines; /* Liste de routines détectées */
-
-};
-
-
-#define EXE_FORMAT(f) ((exe_format *)f)
-
-
-
-
-
-#endif /* _FORMAT_EXE_FORMAT_INT_H */
diff --git a/src/format/exe_format.c b/src/format/exe_format.c
deleted file mode 100644
index 14f1541..0000000
--- a/src/format/exe_format.c
+++ /dev/null
@@ -1,485 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * exe_format.h - support des formats d'exécutables
- *
- * Copyright (C) 2008-2012 Cyrille Bagard
- *
- * This file is part of Chrysalide.
- *
- * 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 "exe_format.h"
-
-
-#include <malloc.h>
-#include <string.h>
-
-
-#include "exe_format-int.h"
-#include "elf/e_elf.h"
-#include "java/e_java.h"
-#include "pe/e_pe.h"
-#include "../panel/log.h"
-
-
-
-#define _(str) str
-
-
-
-
-/* ------------------------ DETECTION DE FORMATS EXECUTABLES ------------------------ */
-
-
-/* Format d'exécutables enregistré */
-typedef struct _registered_exe_format
-{
- const char *name; /* Désignation du format */
-
- exe_match_fc match; /* Procédure de reconnaissance */
- exe_load_fc load; /* Fonction de chargement */
-
-} registered_exe_format;
-
-
-/* Liste des formats d'exécutables enregistrés */
-static registered_exe_format *exe_formats = NULL;
-static size_t exe_formats_count = 0;
-
-
-/* Enregistre la disponibilité d'un nouveau format exécutable. */
-void register_exe_format(const char *, exe_match_fc, exe_load_fc);
-
-
-
-
-/* ---------------------------------------------------------------------------------- */
-/* MANIPULATION DES PARTIES DE CODE */
-/* ---------------------------------------------------------------------------------- */
-
-
-/******************************************************************************
-* *
-* Paramètres : - *
-* *
-* Description : Crée une description de partie de code vierge. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bin_part *create_bin_part(void)
-{
- bin_part *result; /* Structure à renvoyer */
-
- result = (bin_part *)calloc(1, sizeof(bin_part));
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : part = description de partie à mettre à jour. *
-* name = nom à donner à la partie. *
-* *
-* Description : Attribue une description humaine à une partie de code. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void set_bin_part_name(bin_part *part, const char *name)
-{
- if (part->name != NULL) free(part->name);
-
- part->name = strdup(name);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : part = description de partie à mettre à jour. *
-* offset = position de la section à conserver. *
-* size = taille de la section à conserver. *
-* voffset = adresse virtuelle de la section à conserver. *
-* *
-* Description : Définit les valeurs utiles d'une partie de code. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void set_bin_part_values(bin_part *part, off_t offset, off_t size, uint64_t voffset)
-{
- part->offset = offset;
- part->size = size;
- part->voffset = voffset;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : part = description de partie à mettre à jour. *
-* offset = position de la section à donner. [OUT] *
-* size = taille de la section à donner. [OUT] *
-* voffset = adresse virtuelle de la section à donner. [OUT] *
-* *
-* Description : Fournit les valeurs utiles d'une partie de code. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void get_bin_part_values(const bin_part *part, off_t *offset, off_t *size, uint64_t *voffset)
-{
- if (offset != NULL) *offset = part->offset;
- if (size != NULL) *size = part->size;
- if (voffset != NULL) *voffset = part->voffset;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : part = description de partie à effacer. *
-* *
-* Description : Supprime de la mémoire une description de partie de code. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void delete_bin_part(bin_part *part)
-{
- if (part->name != NULL) free(part->name);
-
- free(part);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : a = premières informations à consulter. *
-* b = secondes informations à consulter. *
-* *
-* Description : Etablit la comparaison entre deux blocs binaires. *
-* *
-* Retour : Bilan : -1 (a < b), 0 (a == b) ou 1 (a > b). *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-int compare_bin_parts(const bin_part **a, const bin_part **b)
-{
- int result; /* Bilan à renvoyer */
-
- if ((*a)->offset < (*b)->offset) result = -1;
- else if((*a)->offset > (*b)->offset) result = 1;
- else result = 0;
-
- return result;
-
-}
-
-
-
-
-
-
-
-
-
-
-
-/* ---------------------------------------------------------------------------------- */
-/* DETECTION DE FORMATS EXECUTABLES */
-/* ---------------------------------------------------------------------------------- */
-
-
-/******************************************************************************
-* *
-* Paramètres : - *
-* *
-* Description : Procède au chargement des formats d'exécutables reconnus. *
-* *
-* Retour : true pour indiquer un chargement réussi, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool init_all_exe_formats(void)
-{
- register_exe_format(_("ELF"), elf_is_matching, load_elf);
- register_exe_format(_("Java"), java_is_matching, load_java);
- register_exe_format(_("Portable Executable"), pe_is_matching, load_pe);
-
- return true;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : name = désignation humaine associée. *
-* match = procédure de reconnaissance fournie. *
-* load = fonction de chargement fournie. *
-* *
-* Description : Enregistre la disponibilité d'un nouveau format exécutable. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void register_exe_format(const char *name, exe_match_fc match, exe_load_fc load)
-{
- exe_formats = (registered_exe_format *)realloc(exe_formats,
- ++exe_formats_count * sizeof(registered_exe_format));
-
- exe_formats[exe_formats_count - 1].name = name;
-
- exe_formats[exe_formats_count - 1].match = match;
- exe_formats[exe_formats_count - 1].load = load;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : content = contenu binaire à parcourir. *
-* length = taille du contenu en question. *
-* *
-* Description : Charge si possible un nouvel exécutable binaire. *
-* *
-* Retour : Adresse du nouveau gestionnaire de format ou NULL si erreur. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-exe_format *load_new_exe_format(const uint8_t *content, off_t length)
-{
- exe_format *result; /* Adresse à retourner */
- size_t i; /* Boucle de parcours */
-
- result = NULL;
-
- for (i = 0; i < exe_formats_count && result == NULL; i++)
- if (exe_formats[i].match(content, length))
- {
- log_variadic_message(LMT_INFO, _("%s is matching..."), exe_formats[i].name);
-
- result = exe_formats[i].load(content, length);
-
- }
-
- return result;
-
-}
-
-
-
-
-
-
-
-/* ---------------------------------------------------------------------------------- */
-/* MANIPULATION DES PARTIES DE CODE */
-/* ---------------------------------------------------------------------------------- */
-
-
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à consulter. *
-* target = nom de la section recherchée. *
-* length = taille du contenu à fournir. [OUT] *
-* *
-* Description : Fournit une référence vers le contenu binaire analysé. *
-* *
-* Retour : Adresse du tampon contenant le contenu du binaire. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-const uint8_t *get_exe_content(const exe_format *format, off_t *length)
-{
- if (length != NULL) *length = format->length;
-
- return format->content;
-
-}
-
-
-
-
-/******************************************************************************
-* *
-* Paramètres : format = informations chargées à consulter. *
-* *
-* Description : Indique le type d'architecture visée par le format. *
-* *
-* Retour : Identifiant de l'architecture ciblée par le format. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-FormatTargetMachine get_exe_target_machine(const exe_format *format)
-{
- return format->get_target_machine(format);
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-/******************************************************************************
-* *
-* Paramètres : format = description de l'exécutable à consulter. *
-* target = nom de la section recherchée. *
-* offset = position de la section trouvée. [OUT] *
-* size = taille de la section trouvée. [OUT] *
-* voffset = adresse virtuelle de la section trouvée. [OUT] *
-* *
-* Description : Recherche une section donnée au sein de binaire. *
-* *
-* Retour : Bilan de l'opération. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool find_exe_section(const exe_format *format, const char *target, off_t *offset, off_t *size, uint64_t *voffset)
-{
- return format->find_section(format, target, offset, size, voffset);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = informations chargées à consulter. *
-* labels = liste des commentaires à insérer. [OUT] *
-* types = type des symboles listés. [OUT] *
-* offsets = liste des indices des commentaires. [OUT] *
-* *
-* Description : Récupère tous les symboles présents dans le contenu binaire. *
-* *
-* Retour : Nombre d'éléments mis en place. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-size_t get_exe_symbols(const exe_format *format, char ***labels, SymbolType **types, uint64_t **offsets)
-{
- return format->get_symbols(format, labels, types, offsets);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = informations chargées à consulter. *
-* labels = liste des commentaires à insérer. [OUT] *
-* types = type des symboles listés. [OUT] *
-* offsets = liste des indices des commentaires. [OUT] *
-* *
-* Description : Récupère tous les éléments identifiées dans le binaire. *
-* *
-* Retour : Nombre d'éléments mis en place. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-size_t get_exe_resolved_items(const exe_format *format, char ***labels, ResolvedType **types, uint64_t **offsets)
-{
- return format->get_resolved(format, labels, types, offsets);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = informations chargées à consulter. *
-* label = étiquette du symbole si trouvé. [OUT] *
-* type = type du symbole trouvé. [OUT] *
-* address = adresse à cibler, puis décallage final. [OUT] *
-* *
-* Description : Recherche le symbole correspondant à une adresse. *
-* *
-* Retour : true si l'opération a été un succès, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool resolve_exe_symbol(const exe_format *format, char **label, SymbolType *type, vmpa_t *address)
-{
- return format->resolve_symbol(format, label, type, address);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : format = informations chargées à consulter. *
-* count = taille du tableau créé. [OUT] *
-* *
-* Description : Fournit le prototype de toutes les routines détectées. *
-* *
-* Retour : Tableau créé ou NULL si aucun symbole de routine trouvé. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GBinRoutine **get_all_exe_routines(const exe_format *format, size_t *count)
-{
- return format->get_all_routines(format, count);
-
-}
diff --git a/src/format/exe_format.h b/src/format/exe_format.h
deleted file mode 100644
index b4cecb3..0000000
--- a/src/format/exe_format.h
+++ /dev/null
@@ -1,152 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * exe_format.h - prototypes pour le support des formats d'exécutables
- *
- * Copyright (C) 2008-2012 Cyrille Bagard
- *
- * This file is part of Chrysalide.
- *
- * 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 _FORMAT_EXE_FORMAT_H
-#define _FORMAT_EXE_FORMAT_H
-
-
-#include <stdbool.h>
-#include <stdint.h>
-#include <sys/types.h>
-
-
-#include "../analysis/routine.h"
-
-#include "symbol.h"
-
-
-/* ------------------------ MANIPULATION DES PARTIES DE CODE ------------------------ */
-
-
-/* Description d'une partie binaire */
-typedef struct _bin_part bin_part;
-
-
-/* Crée une description de partie de code vierge. */
-bin_part *create_bin_part(void);
-
-/* Attribue une description humaine à une partie de code. */
-void set_bin_part_name(bin_part *, const char *);
-
-/* Définit les valeurs utiles d'une partie de code. */
-void set_bin_part_values(bin_part *, off_t, off_t, uint64_t);
-
-/* Fournit les valeurs utiles d'une partie de code. */
-void get_bin_part_values(const bin_part *, off_t *, off_t *, uint64_t *);
-
-/* Supprime de la mémoire une description de partie de code. */
-void delete_bin_part(bin_part *);
-
-/* Etablit la comparaison entre deux blocs binaires. */
-int compare_bin_parts(const bin_part **, const bin_part **);
-
-
-
-
-/* FIXME !!!!!!!!!!!! */
-
-/* Support générique d'un format d'exécutable */
-typedef struct _exe_format exe_format;
-
-
-
-/* ------------------------ DETECTION DE FORMATS EXECUTABLES ------------------------ */
-
-
-/* Indication à propos du support d'un format */
-typedef bool (* exe_match_fc) (const uint8_t *, off_t);
-
-/* Méthode de chargement d'un format */
-typedef exe_format * (* exe_load_fc) (const uint8_t *, off_t);
-
-
-/* Procède au chargement des formats d'exécutables reconnus. */
-bool init_all_exe_formats(void);
-
-/* Charge si possible un nouvel exécutable binaire. */
-exe_format *load_new_exe_format(const uint8_t *, off_t);
-
-
-
-
-#if 0
-/* Architectures de destination des formats */
-typedef enum _FormatTargetMachine
-{
- FTM_JVM, /* Java Virtual Machine */
- FTM_MIPS, /* Mips 32 ou 64 bits */
- FTM_386, /* Intel 80386 */
-
- FTM_COUNT
-
-} FormatTargetMachine;
-
-
-
-/* Types de symbole */
-typedef enum _SymbolType
-{
- STP_SECTION, /* Simple morceau de code */
- STP_STRING /* Chaîne de caractères */
-
-} SymbolType;
-#endif
-
-
-/* Types de symbole */
-typedef enum _ResolvedType
-{
- RTP_SECTION, /* Simple morceau de code */
- RTP_STRING /* Chaîne de caractères */
-
-} ResolvedType;
-
-
-/* Fournit une référence vers le contenu binaire analysé. */
-const uint8_t *get_exe_content(const exe_format *, off_t *);
-
-
-
-/* Indique le type d'architecture visée par le format. */
-FormatTargetMachine get_exe_target_machine(const exe_format *);
-
-
-
-/* Recherche une section donnée au sein de binaire. */
-bool find_exe_section(const exe_format *, const char *, off_t *, off_t *, uint64_t *);
-
-/* Récupère tous les symboles présents dans le contenu binaire. */
-size_t get_exe_symbols(const exe_format *, char ***, SymbolType **, uint64_t **);
-
-/* Récupère tous les éléments identifiées dans le binaire. */
-size_t get_exe_resolved_items(const exe_format *, char ***, ResolvedType **, uint64_t **);
-
-/* Recherche le symbole correspondant à une adresse. */
-bool resolve_exe_symbol(const exe_format *, char **, SymbolType *, vmpa_t *);
-
-/* Fournit le prototype de toutes les routines détectées. */
-GBinRoutine **get_all_exe_routines(const exe_format *, size_t *);
-
-
-
-#endif /* _FORMAT_EXE_FORMAT_H */
diff --git a/src/format/executable-int.h b/src/format/executable-int.h
index 51a2625..119c251 100644
--- a/src/format/executable-int.h
+++ b/src/format/executable-int.h
@@ -38,9 +38,6 @@ typedef FormatTargetMachine (* get_target_machine_fc) (const GExeFormat *);
/* Etend la définition des portions au sein d'un binaire. */
typedef void (* refine_portions_fc) (const GExeFormat *, GBinPortion *);
-/* Fournit les références aux zones de code à analyser. */
-typedef GBinPart ** (* get_parts_fc) (const GExeFormat *, size_t *);
-
/* Fournit la position correspondant à une adresse virtuelle. */
typedef bool (* translate_addr_fc) (const GExeFormat *, vmpa_t, off_t *);
@@ -57,7 +54,6 @@ struct _GExeFormat
get_target_machine_fc get_machine; /* Architecture ciblée */
refine_portions_fc refine_portions; /* Décrit les portions binaires*/
- get_parts_fc get_parts; /* Liste des parties binaires */
translate_addr_fc translate_addr; /* Correspondance addr -> pos */
translate_off_fc translate_off; /* Correspondance pos -> addr */
diff --git a/src/format/executable.c b/src/format/executable.c
index db846e2..c1a0a7c 100644
--- a/src/format/executable.c
+++ b/src/format/executable.c
@@ -24,11 +24,12 @@
#include "executable.h"
-#include "executable-int.h"
-#include "format.h"
+#include <malloc.h>
+#include <stdlib.h>
-#include <malloc.h>
+#include "executable-int.h"
+#include "format.h"
@@ -255,26 +256,6 @@ mrange_t *g_exe_format_get_x_ranges(GExeFormat *format, size_t *count)
/******************************************************************************
* *
-* Paramètres : format = informations chargées à consulter. *
-* count = quantité de zones listées. [OUT] *
-* *
-* Description : Fournit les références aux zones binaires à analyser. *
-* *
-* Retour : Zones binaires à analyser. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GBinPart **g_exe_format_get_parts(const GExeFormat *format, size_t *count)
-{
- return format->get_parts(format, count);
-
-}
-
-
-/******************************************************************************
-* *
* Paramètres : format = description de l'exécutable à consulter. *
* addr = adresse virtuelle à retrouver. *
* pos = position correspondante. [OUT] *
diff --git a/src/format/executable.h b/src/format/executable.h
index 1a3febf..4dc2ddd 100644
--- a/src/format/executable.h
+++ b/src/format/executable.h
@@ -28,7 +28,6 @@
#include <glib-object.h>
-#include "part.h"
#include "../glibext/gbinportion.h"
@@ -81,9 +80,6 @@ GBinPortion **g_exe_format_get_portions_at_level(GExeFormat *, unsigned int, siz
/* Fournit les espaces mémoires des portions exécutables. */
mrange_t *g_exe_format_get_x_ranges(GExeFormat *format, size_t *count);
-/* Fournit les références aux zones binaires à analyser. */
-GBinPart **g_exe_format_get_parts(const GExeFormat *, size_t *) __attribute__ ((deprecated));
-
/* Fournit la position correspondant à une adresse virtuelle. */
bool g_exe_format_translate_address_into_offset(const GExeFormat *, vmpa_t, off_t *);
diff --git a/src/format/java/java.c b/src/format/java/java.c
index 3235711..16c9fb7 100755
--- a/src/format/java/java.c
+++ b/src/format/java/java.c
@@ -48,9 +48,6 @@ static void g_java_format_init(GJavaFormat *);
/* Indique le type d'architecture visée par le format. */
static FormatTargetMachine g_java_format_get_target_machine(const GJavaFormat *);
-/* Fournit les références aux zones binaires à analyser. */
-static GBinPart **g_java_format_get_parts(const GJavaFormat *, size_t *);
-
/* Fournit la position correspondant à une adresse virtuelle. */
static bool g_java_format_translate_address_into_offset(const GJavaFormat *, vmpa_t, off_t *);
@@ -128,7 +125,6 @@ static void g_java_format_init(GJavaFormat *format)
exe_format = G_EXE_FORMAT(format);
exe_format->get_machine = (get_target_machine_fc)g_java_format_get_target_machine;
- exe_format->get_parts = (get_parts_fc)g_java_format_get_parts;
exe_format->translate_addr = (translate_addr_fc)g_java_format_translate_address_into_offset;
exe_format->translate_off = (translate_off_fc)g_java_format_translate_offset_into_address;
@@ -217,52 +213,6 @@ static FormatTargetMachine g_java_format_get_target_machine(const GJavaFormat *f
/******************************************************************************
* *
-* Paramètres : format = informations chargées à consulter. *
-* count = quantité de zones listées. [OUT] *
-* *
-* Description : Fournit les références aux zones binaires à analyser. *
-* *
-* Retour : Zones binaires à analyser. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static GBinPart **g_java_format_get_parts(const GJavaFormat *format, size_t *count)
-{
- GBinPart **result; /* Tableau à retourner */
- uint16_t i; /* Boucle de parcours */
- off_t offset; /* Position physique */
- off_t size; /* Taille de la partie */
- GBinPart *part; /* Partie à intégrer à la liste*/
-
- result = NULL;
- *count = 0;
- /*
- for (i = 0; i < format->header.methods_count; i++)
- if (find_java_method_code_part(&format->header.methods[i], &offset, &size))
- {
- part = g_binary_part_new();
-
- g_binary_part_set_name(part, "name");
-
- g_binary_part_set_values(part, offset, size, offset);
-
- result = (GBinPart **)realloc(result, ++(*count) * sizeof(GBinPart *));
- result[*count - 1] = part;
-
- }
-
- }
- */
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
* Paramètres : format = description de l'exécutable à consulter. *
* addr = adresse virtuelle à retrouver. *
* pos = position correspondante. [OUT] *
diff --git a/src/format/part.c b/src/format/part.c
deleted file mode 100644
index c79c176..0000000
--- a/src/format/part.c
+++ /dev/null
@@ -1,416 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * part.h - manipulation des parties de code
- *
- * Copyright (C) 2009-2012 Cyrille Bagard
- *
- * This file is part of Chrysalide.
- *
- * 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 "part.h"
-
-
-#include <malloc.h>
-#include <stdlib.h>
-#include <string.h>
-
-
-
-/* Bloc de données binaires quelconques (instance) */
-struct _GBinPart
-{
- GObject parent; /* A laisser en premier */
-
- char *name; /* Désignation humaine */
-
- off_t offset; /* Position physique */
- off_t size; /* Taille de la partie */
- vmpa_t addr; /* Adresse associée */
-
-#ifdef DEBUG
- unsigned int valid; /* Instructions reconnues */
- unsigned int db; /* Instructions non traduites */
-#endif
-
-};
-
-/* Bloc de données binaires quelconques (classe) */
-struct _GBinPartClass
-{
- GObjectClass parent; /* A laisser en premier */
-
-};
-
-
-/* Initialise la classe des blocs de données binaires. */
-static void g_binary_part_class_init(GBinPartClass *);
-
-/* Initialise une instance de bloc de données binaires. */
-static void g_binary_part_init(GBinPart *);
-
-
-
-/* Indique le type défini par la GLib pour les blocs de doonées. */
-G_DEFINE_TYPE(GBinPart, g_binary_part, G_TYPE_OBJECT);
-
-
-/******************************************************************************
-* *
-* Paramètres : klass = classe à initialiser. *
-* *
-* Description : Initialise la classe des blocs de données binaires. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void g_binary_part_class_init(GBinPartClass *klass)
-{
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : line = instance à initialiser. *
-* *
-* Description : Initialise une instance de bloc de données binaires. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static void g_binary_part_init(GBinPart *line)
-{
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : - *
-* *
-* Description : Crée une description de partie de code vierge. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GBinPart *g_binary_part_new(void)
-{
- GBinPart *result; /* Structure à retourner */
-
- result = g_object_new(G_TYPE_BIN_PART, NULL);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : src = partie de code à copier. *
-* *
-* Description : Crée une description de partie de code à partir d'une autre. *
-* *
-* Retour : Partie de code copiée. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GBinPart *g_binary_part_dump(const GBinPart *src)
-{
- GBinPart *result; /* Structure à retourner */
-
- result = g_object_new(G_TYPE_BIN_PART, NULL);
-
- result->name = (src->name != NULL ? strdup(src->name) : NULL);
-
- result->offset = result->offset;
- result->size = result->size;
- result->addr = result->addr;
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : node = noeud XML contenant les données à charger. *
-* *
-* Description : Crée une description de partie de code vierge à partir d'XML.*
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-GBinPart *g_binary_part_load_from_xml(xmlNodePtr node)
-{
- GBinPart *result; /* Structure à retourner */
- char *value; /* Propriété lue depuis le XML */
-
- result = g_binary_part_new();
-
- result->name = qck_get_node_prop_value(node, "name");
- if (result->name == NULL) goto gbplfx_error;
-
- value = qck_get_node_prop_value(node, "offset");
- if (value == NULL) goto gbplfx_error;
-
- result->offset = atoi(value);
- free(value);
-
- value = qck_get_node_prop_value(node, "size");
- if (value == NULL) goto gbplfx_error;
-
- result->size = atoi(value);
- free(value);
-
- return result;
-
- gbplfx_error:
-
- g_object_unref(G_OBJECT(result));
-
- return NULL;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : part = description de partie à sauvegarder. *
-* xdoc = structure XML chargée. *
-* parent = noeud XML où rattacher le futur nouveau noeud. *
-* *
-* Description : Enregistre les informations d'une partie de code dans du XML.*
-* *
-* Retour : Bilan de l'opération. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool g_binary_part_save_to_xml(const GBinPart *part, xmlDocPtr xdoc, xmlNodePtr parent)
-{
- bool result; /* Bilan à retourner */
- xmlNodePtr node; /* Nouveau noeud créé */
-
- result = true;
-
- node = add_node_to_node(xdoc, parent, "Part");
- if (node == NULL) return false;
-
- result = _add_string_attribute_to_node(node, "name", part->name);
- result &= add_long_attribute_to_node(node, "offset", part->offset);
- result &= add_long_attribute_to_node(node, "size", part->size);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : part = description de partie à mettre à jour. *
-* name = nom à donner à la partie. *
-* *
-* Description : Attribue une description humaine à une partie de code. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void g_binary_part_set_name(GBinPart *part, const char *name)
-{
- if (part->name != NULL) free(part->name);
-
- part->name = strdup(name);
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : part = description de partie à mettre à jour. *
-* *
-* Description : Fournit la description attribuée à une partie de code. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-const char *g_binary_part_get_name(const GBinPart *part)
-{
- return part->name;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : part = description de partie à mettre à jour. *
-* offset = position de la section à conserver. *
-* size = taille de la section à conserver. *
-* addr = adresse de la section à conserver. *
-* *
-* Description : Définit les valeurs utiles d'une partie de code. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void g_binary_part_set_values(GBinPart *part, off_t offset, off_t size, vmpa_t addr)
-{
- part->offset = offset;
- part->size = size;
- part->addr = addr;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : part = description de partie à mettre à jour. *
-* addr = adresse de la section à conserver. *
-* *
-* Description : Définit l'adresse virtuelle d'une partie de code. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void g_binary_part_set_address(GBinPart *part, vmpa_t addr)
-{
- part->addr = addr;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : part = description de partie à consulter. *
-* offset = position de la section à donner ou NULL. [OUT] *
-* size = taille de la section à donner ou NULL. [OUT] *
-* addr = adresse de la section à donner ou NULL. [OUT] *
-* *
-* Description : Fournit les valeurs utiles d'une partie de code. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void g_binary_part_get_values(const GBinPart *part, off_t *offset, off_t *size, vmpa_t *addr)
-{
- if (offset != NULL) *offset = part->offset;
- if (size != NULL) *size = part->size;
- if (addr != NULL) *addr = part->addr;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : a = premières informations à consulter. *
-* b = secondes informations à consulter. *
-* *
-* Description : Etablit la comparaison entre deux blocs binaires. *
-* *
-* Retour : Bilan : -1 (a < b), 0 (a == b) ou 1 (a > b). *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-int g_binary_part_compare(const GBinPart **a, const GBinPart **b)
-{
- int result; /* Bilan à renvoyer */
-
- if ((*a)->offset < (*b)->offset) result = -1;
- else if((*a)->offset > (*b)->offset) result = 1;
- else result = 0;
-
- return result;
-
-}
-
-#ifdef DEBUG
-
-/******************************************************************************
-* *
-* Paramètres : part = description de partie à mettre à jour. *
-* valid = quantité d'instructions décodées pour cette partie. *
-* db = quantité d'instructions non traduites ici. *
-* *
-* Description : Mémorise un bilan de désassemblage. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void g_binary_part_set_checkup(GBinPart *part, unsigned int valid, unsigned int db)
-{
- part->valid = valid;
- part->db = db;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : part = description de partie à mettre à jour. *
-* valid = quantité d'instructions décodées ici. [OUT] *
-* db = quantité d'instructions non traduites ici. [OUT] *
-* *
-* Description : Mémorise un bilan de désassemblage. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-void g_binary_part_get_checkup(const GBinPart *part, unsigned int *valid, unsigned int *db)
-{
- *valid = part->valid;
- *db = part->db;
-
-}
-
-#endif
diff --git a/src/format/part.h b/src/format/part.h
deleted file mode 100644
index e45f234..0000000
--- a/src/format/part.h
+++ /dev/null
@@ -1,97 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * part.h - prototypes pour la manipulation des parties de code
- *
- * Copyright (C) 2009-2012 Cyrille Bagard
- *
- * This file is part of Chrysalide.
- *
- * 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 _FORMAT_PART_H
-#define _FORMAT_PART_H
-
-
-#include <glib-object.h>
-#include <sys/types.h>
-
-
-#include "../common/xml.h"
-#include "../arch/archbase.h"
-
-
-
-#define G_TYPE_BIN_PART (g_binary_part_get_type())
-#define G_BIN_PART(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), G_TYPE_BIN_PART, GBinPart))
-#define G_IS_BIN_PART(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), G_TYPE_BIN_PART))
-#define G_BIN_PART_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), G_TYPE_BIN_PART, GBinPartClass))
-#define G_IS_BIN_PART_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_BIN_PART))
-#define G_BIN_PART_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_BIN_PART, GBinPartClass))
-
-
-/* Bloc de données binaires quelconques (instance) */
-typedef struct _GBinPart GBinPart;
-
-/* Bloc de données binaires quelconques (classe) */
-typedef struct _GBinPartClass GBinPartClass;
-
-
-/* Indique le type défini par la GLib pour les blocs de doonées. */
-GType g_binary_part_get_type(void);
-
-/* Crée une description de partie de code vierge. */
-GBinPart *g_binary_part_new(void);
-
-/* Crée une description de partie de code à partir d'une autre. */
-GBinPart *g_binary_part_dump(const GBinPart *);
-
-/* Crée une description de partie de code vierge à partir d'XML. */
-GBinPart *g_binary_part_load_from_xml(xmlNodePtr);
-
-/* Enregistre les informations d'une partie de code dans du XML. */
-bool g_binary_part_save_to_xml(const GBinPart *, xmlDocPtr, xmlNodePtr);
-
-/* Attribue une description humaine à une partie de code. */
-void g_binary_part_set_name(GBinPart *, const char *);
-
-/* Fournit la description attribuée à une partie de code. */
-const char *g_binary_part_get_name(const GBinPart *);
-
-/* Définit les valeurs utiles d'une partie de code. */
-void g_binary_part_set_values(GBinPart *, off_t, off_t, vmpa_t);
-
-/* Définit l'adresse virtuelle d'une partie de code. */
-void g_binary_part_set_address(GBinPart *, vmpa_t);
-
-/* Fournit les valeurs utiles d'une partie de code. */
-void g_binary_part_get_values(const GBinPart *, off_t *, off_t *, vmpa_t *);
-
-/* Etablit la comparaison entre deux blocs binaires. */
-int g_binary_part_compare(const GBinPart **, const GBinPart **);
-
-#ifdef DEBUG
-
-/* Mémorise un bilan de désassemblage. */
-void g_binary_part_set_checkup(GBinPart *, unsigned int, unsigned int);
-
-/* Mémorise un bilan de désassemblage. */
-void g_binary_part_get_checkup(const GBinPart *, unsigned int *, unsigned int *);
-
-#endif
-
-
-
-#endif /* _FORMAT_PART_H */
diff --git a/src/format/pe/pe.c b/src/format/pe/pe.c
index 2692560..16a9032 100644
--- a/src/format/pe/pe.c
+++ b/src/format/pe/pe.c
@@ -43,7 +43,7 @@ static void g_pe_format_init(GPeFormat *);
static FormatTargetMachine g_pe_format_get_target_machine(const GPeFormat *);
/* Fournit les références aux zones binaires à analyser. */
-static GBinPart **g_pe_format_get_parts(const GPeFormat *, size_t *);
+//static GBinPart **g_pe_format_get_parts(const GPeFormat *, size_t *);
/* Fournit la position correspondant à une adresse virtuelle. */
static bool g_pe_format_translate_address_into_offset(const GPeFormat *, vmpa_t, off_t *);
@@ -137,7 +137,6 @@ static void g_pe_format_init(GPeFormat *format)
exe_format = G_EXE_FORMAT(format);
exe_format->get_machine = (get_target_machine_fc)g_pe_format_get_target_machine;
- exe_format->get_parts = (get_parts_fc)g_pe_format_get_parts;
exe_format->translate_addr = (translate_addr_fc)g_pe_format_translate_address_into_offset;
exe_format->translate_off = (translate_off_fc)g_pe_format_translate_offset_into_address;
@@ -263,7 +262,7 @@ static FormatTargetMachine g_pe_format_get_target_machine(const GPeFormat *forma
* Remarques : - *
* *
******************************************************************************/
-
+#if 0
static GBinPart **g_pe_format_get_parts(const GPeFormat *format, size_t *count)
{
GBinPart **result; /* Tableau à retourner */
@@ -311,7 +310,7 @@ static GBinPart **g_pe_format_get_parts(const GPeFormat *format, size_t *count)
return result;
}
-
+#endif
/******************************************************************************
* *