summaryrefslogtreecommitdiff
path: root/src/analysis
diff options
context:
space:
mode:
Diffstat (limited to 'src/analysis')
-rw-r--r--src/analysis/binary.c138
-rw-r--r--src/analysis/binary.h54
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 */