diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2009-06-01 11:37:31 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2009-06-01 11:37:31 (GMT) |
commit | 1b8152d6f95b03f81aa6a4043c23a45a9f74c418 (patch) | |
tree | a7b625acaee0b9584f3b2b6aa49bd507b652bd5c /src/analysis | |
parent | 8724afdc73e0ddad86f46de1a3fbe0254575a76e (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.c | 2 | ||||
-rw-r--r-- | src/analysis/prototype.c | 97 | ||||
-rw-r--r-- | src/analysis/prototype.h | 37 |
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 *); |