diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2021-09-26 21:21:41 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2021-09-26 21:21:41 (GMT) |
commit | dc25699a414f0baa2265be0cfa162c77b2cdc22d (patch) | |
tree | da0d2d78716e6818aa7e1b8851f70f47da8a905f /src/format | |
parent | ce46ff64c00a90d03e2481dcaf1e713f22b71492 (diff) |
Provide a serialization capability for operands.
Diffstat (limited to 'src/format')
-rw-r--r-- | src/format/strsym.c | 4 | ||||
-rw-r--r-- | src/format/symbol-int.h | 10 | ||||
-rw-r--r-- | src/format/symbol.c | 158 |
3 files changed, 169 insertions, 3 deletions
diff --git a/src/format/strsym.c b/src/format/strsym.c index d5b9157..d585434 100644 --- a/src/format/strsym.c +++ b/src/format/strsym.c @@ -182,8 +182,8 @@ static void g_string_symbol_feeder_interface_init(GProxyFeederInterface *iface) iface->print = (print_proxy_feeder_fc)g_string_symbol_print; - iface->unserialize = (unserialize_proxy_feeder_fc)g_string_symbol_unserialize; - iface->serialize = (serialize_proxy_feeder_fc)g_string_symbol_serialize; + //iface->unserialize = (unserialize_proxy_feeder_fc)g_string_symbol_unserialize; + //iface->serialize = (serialize_proxy_feeder_fc)g_string_symbol_serialize; } diff --git a/src/format/symbol-int.h b/src/format/symbol-int.h index 7f5807c..7f8bb7f 100644 --- a/src/format/symbol-int.h +++ b/src/format/symbol-int.h @@ -26,6 +26,7 @@ #include "symbol.h" +#include "../analysis/storage/serialize-int.h" #include "../glibext/objhole.h" @@ -33,6 +34,12 @@ /* Fournit une étiquette pour viser un symbole. */ typedef char * (* get_symbol_label_fc) (const GBinSymbol *); +/* Charge un contenu depuis une mémoire tampon. */ +typedef bool (* load_symbol_fc) (GBinSymbol *, GObjectStorage *, packed_buffer_t *); + +/* Sauvegarde un contenu dans une mémoire tampon. */ +typedef bool (* store_symbol_fc) (GBinSymbol *, GObjectStorage *, packed_buffer_t *); + /* Informations glissées dans la structure GObject de GBinSymbol */ typedef struct _sym_extra_data_t @@ -86,6 +93,9 @@ struct _GBinSymbolClass get_symbol_label_fc get_label; /* Obtention d'une étiquette */ + load_symbol_fc load; /* Chargement depuis un tampon */ + store_symbol_fc store; /* Conservation dans un tampon */ + }; diff --git a/src/format/symbol.c b/src/format/symbol.c index d3d5285..2cd4f87 100644 --- a/src/format/symbol.c +++ b/src/format/symbol.c @@ -48,6 +48,9 @@ static void g_binary_symbol_init(GBinSymbol *); /* Procède à l'initialisation de l'interface de génération. */ static void g_binary_symbol_interface_init(GLineGeneratorInterface *); +/* Procède à l'initialisation de l'interface de sérialisation. */ +static void g_binary_symbol_serializable_init(GSerializableObjectInterface *); + /* Supprime toutes les références externes. */ static void g_binary_symbol_dispose(GBinSymbol *); @@ -76,6 +79,23 @@ static void g_binary_symbol_print(GBinSymbol *, GBufferLine *, size_t, size_t, c +/* -------------------- CONSERVATION ET RECHARGEMENT DES DONNEES -------------------- */ + + +/* Charge un contenu depuis une mémoire tampon. */ +static bool _g_binary_symbol_load(GBinSymbol *, GObjectStorage *, packed_buffer_t *); + +/* Charge un contenu depuis une mémoire tampon. */ +static bool g_binary_symbol_load(GBinSymbol *, GObjectStorage *, packed_buffer_t *); + +/* Sauvegarde un contenu dans une mémoire tampon. */ +static bool _g_binary_symbol_store(GBinSymbol *, GObjectStorage *, packed_buffer_t *); + +/* Sauvegarde un contenu dans une mémoire tampon. */ +static bool g_binary_symbol_store(GBinSymbol *, GObjectStorage *, packed_buffer_t *); + + + /* ---------------------------------------------------------------------------------- */ /* FONCTIONNALITES BASIQUES POUR SYMBOLES */ /* ---------------------------------------------------------------------------------- */ @@ -83,7 +103,8 @@ static void g_binary_symbol_print(GBinSymbol *, GBufferLine *, size_t, size_t, c /* Indique le type défini pour un symbole d'exécutable. */ G_DEFINE_TYPE_WITH_CODE(GBinSymbol, g_binary_symbol, G_TYPE_OBJECT, - G_IMPLEMENT_INTERFACE(G_TYPE_LINE_GENERATOR, g_binary_symbol_interface_init)); + G_IMPLEMENT_INTERFACE(G_TYPE_LINE_GENERATOR, g_binary_symbol_interface_init) + G_IMPLEMENT_INTERFACE(G_TYPE_SERIALIZABLE_OBJECT, g_binary_symbol_serializable_init)); /****************************************************************************** @@ -107,6 +128,9 @@ static void g_binary_symbol_class_init(GBinSymbolClass *klass) object->dispose = (GObjectFinalizeFunc/* ! */)g_binary_symbol_dispose; object->finalize = (GObjectFinalizeFunc)g_binary_symbol_finalize; + klass->load = (load_symbol_fc)_g_binary_symbol_load; + klass->store = (store_symbol_fc)_g_binary_symbol_store; + } @@ -162,6 +186,26 @@ static void g_binary_symbol_interface_init(GLineGeneratorInterface *iface) /****************************************************************************** * * +* Paramètres : iface = interface GLib à initialiser. * +* * +* Description : Procède à l'initialisation de l'interface de sérialisation. * +* * +* Retour : - * +* * +* Remarques : - * +* * +******************************************************************************/ + +static void g_binary_symbol_serializable_init(GSerializableObjectInterface *iface) +{ + iface->load = (load_serializable_object_cb)g_binary_symbol_load; + iface->store = (store_serializable_object_cb)g_binary_symbol_store; + +} + + +/****************************************************************************** +* * * Paramètres : symbol = instance d'objet GLib à traiter. * * * * Description : Supprime toutes les références externes. * @@ -871,3 +915,115 @@ static void g_binary_symbol_print(GBinSymbol *symbol, GBufferLine *line, size_t } } + + + +/* ---------------------------------------------------------------------------------- */ +/* CONSERVATION ET RECHARGEMENT DES DONNEES */ +/* ---------------------------------------------------------------------------------- */ + + +/****************************************************************************** +* * +* Paramètres : symbol = élément GLib à constuire. * +* storage = conservateur de données à manipuler ou NULL. * +* pbuf = zone tampon à lire. * +* * +* Description : Charge un contenu depuis une mémoire tampon. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static bool _g_binary_symbol_load(GBinSymbol *symbol, GObjectStorage *storage, packed_buffer_t *pbuf) +{ + bool result; /* Bilan à retourner */ + + result = true; + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : symbol = élément GLib à constuire. * +* storage = conservateur de données à manipuler ou NULL. * +* pbuf = zone tampon à lire. * +* * +* Description : Charge un contenu depuis une mémoire tampon. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static bool g_binary_symbol_load(GBinSymbol *symbol, GObjectStorage *storage, packed_buffer_t *pbuf) +{ + bool result; /* Bilan à retourner */ + GBinSymbolClass *class; /* Classe à activer */ + + class = G_BIN_SYMBOL_GET_CLASS(symbol); + + result = class->load(symbol, storage, pbuf); + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : symbol = élément GLib à consulter. * +* storage = conservateur de données à manipuler ou NULL. * +* pbuf = zone tampon à remplir. * +* * +* Description : Sauvegarde un contenu dans une mémoire tampon. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static bool _g_binary_symbol_store(GBinSymbol *symbol, GObjectStorage *storage, packed_buffer_t *pbuf) +{ + bool result; /* Bilan à retourner */ + + result = true; + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : symbol = élément GLib à consulter. * +* storage = conservateur de données à manipuler ou NULL. * +* pbuf = zone tampon à remplir. * +* * +* Description : Sauvegarde un contenu dans une mémoire tampon. * +* * +* Retour : Bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static bool g_binary_symbol_store(GBinSymbol *symbol, GObjectStorage *storage, packed_buffer_t *pbuf) +{ + bool result; /* Bilan à retourner */ + GBinSymbolClass *class; /* Classe à activer */ + + class = G_BIN_SYMBOL_GET_CLASS(symbol); + + result = class->store(symbol, storage, pbuf); + + return result; + +} |