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