diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2015-02-03 23:21:49 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2015-02-03 23:21:49 (GMT) |
commit | 425860b441b21e4aca7bf2473be26b0fe1e756e2 (patch) | |
tree | 341a0fc8b370d76566f3e332c344ffae5c065916 /src/format | |
parent | 5511e355e7810f06bd610b79bcc94402c88d7ec9 (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
Diffstat (limited to 'src/format')
-rw-r--r-- | src/format/Makefile.am | 1 | ||||
-rw-r--r-- | src/format/dex/class.c | 4 | ||||
-rw-r--r-- | src/format/dex/class.h | 2 | ||||
-rwxr-xr-x | src/format/dex/dex.c | 7 | ||||
-rw-r--r-- | src/format/dex/method.c | 4 | ||||
-rw-r--r-- | src/format/dex/method.h | 4 | ||||
-rw-r--r-- | src/format/elf/elf.c | 102 | ||||
-rw-r--r-- | src/format/exe_format-int.h | 100 | ||||
-rw-r--r-- | src/format/exe_format.c | 485 | ||||
-rw-r--r-- | src/format/exe_format.h | 152 | ||||
-rw-r--r-- | src/format/executable-int.h | 4 | ||||
-rw-r--r-- | src/format/executable.c | 27 | ||||
-rw-r--r-- | src/format/executable.h | 4 | ||||
-rwxr-xr-x | src/format/java/java.c | 50 | ||||
-rw-r--r-- | src/format/part.c | 416 | ||||
-rw-r--r-- | src/format/part.h | 97 | ||||
-rw-r--r-- | src/format/pe/pe.c | 7 |
17 files changed, 16 insertions, 1450 deletions
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, §ion)) - 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 /****************************************************************************** * * |