diff options
Diffstat (limited to 'src/analysis/binary.c')
-rw-r--r-- | src/analysis/binary.c | 138 |
1 files changed, 83 insertions, 55 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 */ |