diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2009-07-26 22:40:17 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2009-07-26 22:40:17 (GMT) |
commit | fd2abec30a224279c62a7ab4892d95e56cb08dff (patch) | |
tree | 2cfcc70115749267fb0f1bc96511dfb61935203f /src/analysis | |
parent | 3155a05a21a52a173b8a711c402426392eb53c2a (diff) |
Moved the openida_binary structure to a GOpenidaBinary GLib object.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@103 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/analysis')
-rw-r--r-- | src/analysis/binary.c | 138 | ||||
-rw-r--r-- | src/analysis/binary.h | 54 |
2 files changed, 111 insertions, 81 deletions
diff --git a/src/analysis/binary.c b/src/analysis/binary.c index a24c3d3..c0c6e7c 100644 --- a/src/analysis/binary.c +++ b/src/analysis/binary.c @@ -54,18 +54,17 @@ -extern bool find_line_info(const uint8_t *content, off_t *size); - - -/* Description d'un fichier binaire */ -struct _openida_binary +/* Description de fichier binaire (instance) */ +struct _GOpenidaBinary { + GObject parent; /* A laisser en premier */ + char *filename; /* Fichier chargé en mémoire */ off_t bin_length; /* Taille des données brutes */ - uint8_t *bin_data; /* Données binaires brutes */ + bin_t *bin_data; /* Données binaires brutes */ exe_format *format; /* Format du binaire */ GArchProcessor *proc; /* Architecture du binaire */ @@ -75,30 +74,80 @@ struct _openida_binary }; +/* Description de fichier binaire (classe) */ +struct _GOpenidaBinaryClass +{ + GObjectClass parent; /* A laisser en premier */ + +}; + + +/* Initialise la classe des descriptions de fichier binaire. */ +static void g_openida_binary_class_init(GOpenidaBinaryClass *); -/* Charge en mémoire le contenu d'un fichier à partir d'XML. */ -openida_binary *load_binary_file_from_xml(xmlXPathObjectPtr); +/* Initialise une description de fichier binaire. */ +static void g_openida_binary_init(GOpenidaBinary *); /* Charge en mémoire le contenu d'un fichier. */ -uint8_t *map_binary_file(const char *, off_t *); +bin_t *map_binary_file(const char *, off_t *); /* Construit la description d'introduction du désassemblage. */ GRenderingLine *build_binary_prologue(const char *, const uint8_t *, off_t); /* Procède au désassemblage basique d'un contenu binaire. */ -void disassemble_openida_binary(openida_binary *); +void disassemble_openida_binary(GOpenidaBinary *); /* Etablit les liens entres les différentes lignes de code. */ -void establish_links_in_openida_binary(const openida_binary *); +void establish_links_in_openida_binary(const GOpenidaBinary *); /* S'assure que toutes les routines ont une taille définie. */ -void limit_all_routines_in_openida_binary(const openida_binary *); +void limit_all_routines_in_openida_binary(const GOpenidaBinary *); /* Cherche l'adresse de fin d'une routine. */ vmpa_t find_best_ending_address_for_routine(GRenderingLine *, size_t, const vmpa_t *, const off_t *, size_t); +/* Indique le type défini pour une description de fichier binaire. */ +G_DEFINE_TYPE(GOpenidaBinary, g_openida_binary, G_TYPE_OBJECT); + + +/****************************************************************************** +* * +* Paramètres : klass = classe à initialiser. * +* * +* Description : Initialise la classe des descriptions de fichier binaire. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void g_openida_binary_class_init(GOpenidaBinaryClass *klass) +{ + +} + + +/****************************************************************************** +* * +* Paramètres : line = instance à initialiser. * +* * +* Description : Initialise une description de fichier binaire. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void g_openida_binary_init(GOpenidaBinary *line) +{ + +} + + /****************************************************************************** * * * Paramètres : filename = nom du fichier à charger. * @@ -111,11 +160,11 @@ vmpa_t find_best_ending_address_for_routine(GRenderingLine *, size_t, const vmpa * * ******************************************************************************/ -openida_binary *load_binary_file(const char *filename) +GOpenidaBinary *g_openida_binary_new_from_file(const char *filename) { - openida_binary *result; /* Adresse à retourner */ + GOpenidaBinary *result; /* Adresse à retourner */ - result = (openida_binary *)calloc(1, sizeof(openida_binary)); + result = g_object_new(G_TYPE_OPENIDA_BINARY, NULL); result->filename = strdup(filename); @@ -158,7 +207,7 @@ openida_binary *load_binary_file(const char *filename) lbf_error: - unload_binary_file(result); + //unload_binary_file(result); return NULL; @@ -178,9 +227,9 @@ openida_binary *load_binary_file(const char *filename) * * ******************************************************************************/ -openida_binary *g_binary_file_new_from_xml(xmlXPathContextPtr context, const char *path) +GOpenidaBinary *g_openida_binary_new_from_xml(xmlXPathContextPtr context, const char *path) { - openida_binary *result; /* Adresse à retourner */ + GOpenidaBinary *result; /* Adresse à retourner */ size_t access_len; /* Taille d'un chemin interne */ char *access; /* Chemin pour une sous-config.*/ char *filename; /* Chemin du binaire à charger */ @@ -202,7 +251,7 @@ openida_binary *g_binary_file_new_from_xml(xmlXPathContextPtr context, const cha if (filename != NULL) { - result = load_binary_file(filename); + result = g_openida_binary_new_from_file(filename); free(filename); } @@ -226,7 +275,7 @@ openida_binary *g_binary_file_new_from_xml(xmlXPathContextPtr context, const cha * * ******************************************************************************/ -bool g_openida_binary_save(const openida_binary *binary, xmlDocPtr xdoc, xmlXPathContextPtr context, const char *path) +bool g_openida_binary_save(const GOpenidaBinary *binary, xmlDocPtr xdoc, xmlXPathContextPtr context, const char *path) { bool result; /* Bilan à faire remonter */ char *access; /* Chemin d'accès à un élément */ @@ -249,38 +298,17 @@ bool g_openida_binary_save(const openida_binary *binary, xmlDocPtr xdoc, xmlXPat /****************************************************************************** * * -* Paramètres : binary = élément binaire à supprimer de la mémoire. * -* * -* Description : Décharge de la mémoire le contenu d'un fichier. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -void unload_binary_file(openida_binary *binary) -{ - free(binary->filename); - - free(binary); - -} - - -/****************************************************************************** -* * * Paramètres : binary = élément binaire à consulter. * * * -* Description : Fournit le fichier correspondant à l'élément binaire. * +* Description : Fournit une description humaine d'un élément binaire. * * * -* Retour : Nom de fichier avec chemin absolu. * +* Retour : Chaîne de caractères humainenement lisible de représentation.* * * * Remarques : - * * * ******************************************************************************/ -const char *openida_binary_get_filename(const openida_binary *binary) +const char *g_openida_binary_to_string(const GOpenidaBinary *binary) { return binary->filename; @@ -291,15 +319,15 @@ const char *openida_binary_get_filename(const openida_binary *binary) * * * Paramètres : binary = élément binaire à consulter. * * * -* Description : Fournit une description humaine d'un élément binaire. * +* Description : Fournit le fichier correspondant à l'élément binaire. * * * -* Retour : Chaîne de caractères humainenement lisible de représentation.* +* Retour : Nom de fichier avec chemin absolu. * * * * Remarques : - * * * ******************************************************************************/ -const char *openida_binary_to_string(const openida_binary *binary) +const char *g_openida_binary_get_filename(const GOpenidaBinary *binary) { return binary->filename; @@ -319,7 +347,7 @@ const char *openida_binary_to_string(const openida_binary *binary) * * ******************************************************************************/ -uint8_t *get_openida_binary_data(const openida_binary *binary, off_t *length) +bin_t *g_openida_binary_get_data(const GOpenidaBinary *binary, off_t *length) { *length = binary->bin_length; @@ -340,7 +368,7 @@ uint8_t *get_openida_binary_data(const openida_binary *binary, off_t *length) * * ******************************************************************************/ -exe_format *get_openida_binary_format(const openida_binary *binary) +exe_format *g_openida_binary_get_format(const GOpenidaBinary *binary) { return binary->format; @@ -359,7 +387,7 @@ exe_format *get_openida_binary_format(const openida_binary *binary) * * ******************************************************************************/ -GRenderingOptions *get_openida_binary_options(const openida_binary *binary) +GRenderingOptions *g_openida_binary_get_options(const GOpenidaBinary *binary) { return binary->options; @@ -378,7 +406,7 @@ GRenderingOptions *get_openida_binary_options(const openida_binary *binary) * * ******************************************************************************/ -GRenderingLine *get_openida_binary_lines(const openida_binary *binary) +GRenderingLine *g_openida_binary_get_lines(const GOpenidaBinary *binary) { return binary->lines; @@ -407,7 +435,7 @@ GRenderingLine *get_openida_binary_lines(const openida_binary *binary) * * ******************************************************************************/ -uint8_t *map_binary_file(const char *filename, off_t *length) +bin_t *map_binary_file(const char *filename, off_t *length) { uint8_t *result; /* Données à retourner */ int fd; /* Fichier ouvert en lecture */ @@ -535,7 +563,7 @@ GRenderingLine *build_binary_prologue(const char *filename, const uint8_t *data, * * ******************************************************************************/ -void disassemble_openida_binary(openida_binary *binary) +void disassemble_openida_binary(GOpenidaBinary *binary) { @@ -658,7 +686,7 @@ void disassemble_openida_binary(openida_binary *binary) * * ******************************************************************************/ -void establish_links_in_openida_binary(const openida_binary *binary) +void establish_links_in_openida_binary(const GOpenidaBinary *binary) { GBinRoutine **routines; /* Liste des routines trouvées */ size_t routines_count; /* Nombre de ces routines */ @@ -754,7 +782,7 @@ void establish_links_in_openida_binary(const openida_binary *binary) * * ******************************************************************************/ -void limit_all_routines_in_openida_binary(const openida_binary *binary) +void limit_all_routines_in_openida_binary(const GOpenidaBinary *binary) { GBinRoutine **routines; /* Liste des routines trouvées */ size_t routines_count; /* Nombre de ces routines */ diff --git a/src/analysis/binary.h b/src/analysis/binary.h index cf47492..ad0429f 100644 --- a/src/analysis/binary.h +++ b/src/analysis/binary.h @@ -21,10 +21,11 @@ */ -#ifndef _BINARY_H -#define _BINARY_H +#ifndef _ANALYSIS_BINARY_H +#define _ANALYSIS_BINARY_H +#include <glib-object.h> #include <stdbool.h> @@ -35,49 +36,50 @@ -/* Description d'un fichier binaire */ -typedef struct _openida_binary openida_binary; +#define G_TYPE_OPENIDA_BINARY g_openida_binary_get_type() +#define G_OPENIDA_BINARY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), g_openida_binary_get_type(), GOpenidaBinary)) +#define G_IS_OPENIDA_BINARY(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_openida_binary_get_type())) +#define G_OPENIDA_BINARY_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE((inst), g_openida_binary_get_type(), GOpenidaBinaryIface)) +#define G_OPENIDA_BINARY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), G_TYPE_OPENIDA_BINARY, GOpenidaBinaryClass)) +/* Description de fichier binaire (instance) */ +typedef struct _GOpenidaBinary GOpenidaBinary; + +/* Description de fichier binaire (classe) */ +typedef struct _GOpenidaBinaryClass GOpenidaBinaryClass; + + +/* Indique le type défini pour une description de fichier binaire. */ +GType g_openida_binary_get_type(void); + /* Charge en mémoire le contenu d'un fichier. */ -openida_binary *load_binary_file(const char *); +GOpenidaBinary *g_openida_binary_new_from_file(const char *); /* Charge en mémoire le contenu d'un fichier à partir d'XML. */ -openida_binary *g_binary_file_new_from_xml(xmlXPathContextPtr, const char *); +GOpenidaBinary *g_openida_binary_new_from_xml(xmlXPathContextPtr, const char *); /* Ecrit une sauvegarde du binaire dans un fichier XML. */ -bool g_openida_binary_save(const openida_binary *, xmlDocPtr, xmlXPathContextPtr, const char *); - -/* Décharge de la mémoire le contenu d'un fichier. */ -void unload_binary_file(openida_binary *); +bool g_openida_binary_save(const GOpenidaBinary *, xmlDocPtr, xmlXPathContextPtr, const char *); /* Fournit une description humaine d'un élément binaire. */ -const char *openida_binary_to_string(const openida_binary *); +const char *g_openida_binary_to_string(const GOpenidaBinary *); /* Fournit le fichier correspondant à l'élément binaire. */ -const char *openida_binary_get_filename(const openida_binary *); +const char *g_openida_binary_get_filename(const GOpenidaBinary *); /* Fournit les détails du contenu binaire chargé en mémoire. */ -uint8_t *get_openida_binary_data(const openida_binary *, off_t *); +bin_t *g_openida_binary_get_data(const GOpenidaBinary *, off_t *); /* Fournit le format de fichier reconnu dans le contenu binaire. */ -exe_format *get_openida_binary_format(const openida_binary *); +exe_format *g_openida_binary_get_format(const GOpenidaBinary *); /* Fournit les options d'affichage définies pour le binaire. */ -GRenderingOptions *get_openida_binary_options(const openida_binary *); +GRenderingOptions *g_openida_binary_get_options(const GOpenidaBinary *); /* Fournit les lignes de rendu issues du désassemblage. */ -GRenderingLine *get_openida_binary_lines(const openida_binary *); - - - - - - - - - +GRenderingLine *g_openida_binary_get_lines(const GOpenidaBinary *); -#endif /* _BINARY_H */ +#endif /* _ANALYSIS_BINARY_H */ |