summaryrefslogtreecommitdiff
path: root/src/analysis
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2009-06-01 11:37:31 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2009-06-01 11:37:31 (GMT)
commit1b8152d6f95b03f81aa6a4043c23a45a9f74c418 (patch)
treea7b625acaee0b9584f3b2b6aa49bd507b652bd5c /src/analysis
parent8724afdc73e0ddad86f46de1a3fbe0254575a76e (diff)
Changed the old bin_routine structure to a GBinRoutine GObject.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@68 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'src/analysis')
-rw-r--r--src/analysis/binary.c2
-rw-r--r--src/analysis/prototype.c97
-rw-r--r--src/analysis/prototype.h37
3 files changed, 100 insertions, 36 deletions
diff --git a/src/analysis/binary.c b/src/analysis/binary.c
index 84401a3..d25a458 100644
--- a/src/analysis/binary.c
+++ b/src/analysis/binary.c
@@ -572,7 +572,7 @@ void disassemble_openida_binary(openida_binary *binary)
GArchInstruction *instr;
- bin_routine **routines; /* Liste des routines trouvées */
+ GBinRoutine **routines; /* Liste des routines trouvées */
size_t routines_count; /* Nombre de ces routines */
bin_part **parts;
diff --git a/src/analysis/prototype.c b/src/analysis/prototype.c
index 0d2ebf5..1e27f2c 100644
--- a/src/analysis/prototype.c
+++ b/src/analysis/prototype.c
@@ -32,14 +32,12 @@
-/* Variable représentant un prototype de routine */
-struct _bin_routine
+/* Représentation générique de routine (instance) */
+struct _GBinRoutine
{
+ GObject parent; /* A laisser en premier */
- uint64_t offset; /* Position physique/mémoire */
-
-
-
+ vmpa_t addr; /* Position physique/mémoire */
RoutineType type; /* Type de routine */
@@ -53,6 +51,61 @@ struct _bin_routine
};
+/* Représentation générique de routine (classe) */
+struct _GBinRoutineClass
+{
+ GObjectClass parent; /* A laisser en premier */
+
+};
+
+
+/* Initialise la classe des représentation de routine. */
+static void g_bin_routine_class_init(GBinRoutineClass *);
+
+/* Initialise une instance représentation de routine. */
+static void g_bin_routine_init(GBinRoutine *);
+
+
+
+/* Indique le type définit pour une représentation de routine. */
+G_DEFINE_TYPE(GBinRoutine, g_bin_routine, G_TYPE_OBJECT);
+
+
+/******************************************************************************
+* *
+* Paramètres : klass = classe à initialiser. *
+* *
+* Description : Initialise la classe des représentation de routine. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void g_bin_routine_class_init(GBinRoutineClass *klass)
+{
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : line = instance à initialiser. *
+* *
+* Description : Initialise une instance représentation de routine. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static void g_bin_routine_init(GBinRoutine *line)
+{
+
+}
+
/******************************************************************************
* *
@@ -66,11 +119,11 @@ struct _bin_routine
* *
******************************************************************************/
-bin_routine *create_binary_routine(void)
+GBinRoutine *g_binary_routine_new(void)
{
- bin_routine *result; /* Structure à retourner */
+ GBinRoutine *result; /* Structure à retourner */
- result = (bin_routine *)calloc(1, sizeof(bin_routine));
+ result = g_object_new(G_TYPE_BIN_ROUTINE, NULL);
return result;
@@ -88,8 +141,8 @@ bin_routine *create_binary_routine(void)
* Remarques : - *
* *
******************************************************************************/
-
-void delete_binary_routine(bin_routine *routine)
+#if 0 /* FIXME */
+void g_binary_routine_finalize(GBinRoutine *routine)
{
size_t i; /* Boucle de parcours */
@@ -105,12 +158,12 @@ void delete_binary_routine(bin_routine *routine)
free(routine);
}
-
+#endif
/******************************************************************************
* *
* Paramètres : routine = routine à mettre à jour. *
-* offset = position mémoire ou physique déclarée. *
+* addr = position mémoire ou physique déclarée. *
* *
* Description : Définit la position physique / en mémoire d'une routine. *
* *
@@ -120,9 +173,9 @@ void delete_binary_routine(bin_routine *routine)
* *
******************************************************************************/
-void set_binary_routine_offset(bin_routine *routine, uint64_t offset)
+void g_binary_routine_set_address(GBinRoutine *routine, vmpa_t addr)
{
- routine->offset = offset;
+ routine->addr = addr;
}
@@ -139,9 +192,9 @@ void set_binary_routine_offset(bin_routine *routine, uint64_t offset)
* *
******************************************************************************/
-uint64_t get_binary_routine_offset(const bin_routine *routine)
+vmpa_t g_binary_routine_get_address(const GBinRoutine *routine)
{
- return routine->offset;
+ return routine->addr;
}
@@ -159,7 +212,7 @@ uint64_t get_binary_routine_offset(const bin_routine *routine)
* *
******************************************************************************/
-void set_binary_routine_type(bin_routine *routine, RoutineType type)
+void g_binary_routine_set_type(GBinRoutine *routine, RoutineType type)
{
routine->type = type;
@@ -179,7 +232,7 @@ void set_binary_routine_type(bin_routine *routine, RoutineType type)
* *
******************************************************************************/
-void set_binary_routine_name(bin_routine *routine, char *name)
+void g_binary_routine_set_name(GBinRoutine *routine, char *name)
{
if (routine->name != NULL)
free(routine->name);
@@ -202,7 +255,7 @@ void set_binary_routine_name(bin_routine *routine, char *name)
* *
******************************************************************************/
-void set_binary_routine_return_type(bin_routine *routine, variable *var)
+void g_binary_routine_set_return_type(GBinRoutine *routine, variable *var)
{
if (routine->ret_type != NULL)
delete_var(routine->ret_type);
@@ -225,7 +278,7 @@ void set_binary_routine_return_type(bin_routine *routine, variable *var)
* *
******************************************************************************/
-void add_arg_to_binary_routine(bin_routine *routine, variable *var)
+void g_binary_routine_add_arg(GBinRoutine *routine, variable *var)
{
routine->args_count++;
@@ -249,7 +302,7 @@ void add_arg_to_binary_routine(bin_routine *routine, variable *var)
* *
******************************************************************************/
-char *routine_to_string(const bin_routine *routine)
+char *g_binary_routine_to_string(const GBinRoutine *routine)
{
char *result; /* Chaîne à renvoyer */
size_t i; /* Boucle de parcours */
diff --git a/src/analysis/prototype.h b/src/analysis/prototype.h
index 891f294..3fd822e 100644
--- a/src/analysis/prototype.h
+++ b/src/analysis/prototype.h
@@ -25,10 +25,12 @@
#define _ANALYSIS_PROTOTYPE_H
+#include <glib-object.h>
#include <stdint.h>
#include "variable.h"
+#include "../arch/archbase.h"
@@ -42,36 +44,45 @@ typedef enum _RoutineType
} RoutineType;
-/* Variable représentant un prototype de routine */
-typedef struct _bin_routine bin_routine;
+#define G_TYPE_BIN_ROUTINE g_bin_routine_get_type()
+#define G_BIN_ROUTINE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), g_bin_routine_get_type(), GBinRoutine))
+#define G_IS_BIN_ROUTINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), g_bin_routine_get_type()))
+#define G_BIN_ROUTINE_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE((inst), g_bin_routine_get_type(), GBinRoutineIface))
-/* Crée une représentation de routine. */
-bin_routine *create_binary_routine(void);
+/* Représentation générique de routine (instance) */
+typedef struct _GBinRoutine GBinRoutine;
+
+/* Représentation générique de routine (classe) */
+typedef struct _GBinRoutineClass GBinRoutineClass;
+
-/* Supprime une représentation de routine de la mémoire. */
-void delete_binary_routine(bin_routine *);
+/* Indique le type définit pour une représentation de routine. */
+GType g_bin_routine_get_type(void);
+
+/* Crée une représentation de routine. */
+GBinRoutine *g_binary_routine_new(void);
/* Définit la position physique / en mémoire d'une routine. */
-void set_binary_routine_offset(bin_routine *, uint64_t);
+void g_binary_routine_set_address(GBinRoutine *, vmpa_t);
/* Fournit la position physique / en mémoire d'une routine. */
-uint64_t get_binary_routine_offset(const bin_routine *);
+vmpa_t g_binary_routine_get_address(const GBinRoutine *);
/* Définit le type d'une routine. */
-void set_binary_routine_type(bin_routine *, RoutineType);
+void g_binary_routine_set_type(GBinRoutine *, RoutineType);
/* Définit le nom humain d'une routine. */
-void set_binary_routine_name(bin_routine *, char *);
+void g_binary_routine_set_name(GBinRoutine *, char *);
/* Définit le type de retour d'une routine. */
-void set_binary_routine_return_type(bin_routine *, variable *);
+void g_binary_routine_set_return_type(GBinRoutine *, variable *);
/* Ajoute un argument à une routine. */
-void add_arg_to_binary_routine(bin_routine *, variable *);
+void g_binary_routine_add_arg(GBinRoutine *, variable *);
/* Décrit le prototype de la routine sous forme de caractères. */
-char *routine_to_string(const bin_routine *);
+char *g_binary_routine_to_string(const GBinRoutine *);