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 */ | 
