From e46e38a30e735cac5618bbd2060ad96644475a02 Mon Sep 17 00:00:00 2001 From: Cyrille Bagard Date: Tue, 10 Apr 2018 19:55:20 +0200 Subject: Provided a direct access to content data in the Python bindings. --- plugins/pychrysalide/analysis/content.c | 48 ++++++++++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/plugins/pychrysalide/analysis/content.c b/plugins/pychrysalide/analysis/content.c index 1f36eb8..05f1c74 100644 --- a/plugins/pychrysalide/analysis/content.c +++ b/plugins/pychrysalide/analysis/content.c @@ -61,6 +61,9 @@ static PyObject *py_binary_content_read_u32(PyObject *, PyObject *); /* Lit un nombre non signé sur huit octets. */ static PyObject *py_binary_content_read_u64(PyObject *, PyObject *); +/* Renvoie tout le contenu binaire d'un coup. */ +static PyObject *py_binary_content_get_all_bytes(PyObject *, void *); + /****************************************************************************** @@ -144,7 +147,7 @@ static PyObject *py_binary_content_read_raw(PyObject *self, PyObject *args) vmpa2t *addr; /* Position interne associée */ unsigned long long length; /* Quantité de données à lire */ int ret; /* Bilan de lecture des args. */ - const bin_t *val; /* Valeur lue à faire suivre */ + const bin_t *val; /* Valeur lue à faire suivre */ content = G_BIN_CONTENT(pygobject_get(self)); assert(content != NULL); @@ -357,6 +360,44 @@ static PyObject *py_binary_content_read_u64(PyObject *self, PyObject *args) /****************************************************************************** * * +* Paramètres : self = contenu binaire à manipuler. * +* closure = adresse non utilisée ici. * +* * +* Description : Renvoie tout le contenu binaire d'un coup. * +* * +* Retour : Ensemble d'octets lus. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static PyObject *py_binary_content_get_all_bytes(PyObject *self, void *closure) +{ + PyObject *result; /* Contenu à retourner */ + GBinContent *content; /* Version GLib du format */ + vmpa2t start; /* Tête de lecture initiale */ + phys_t length; /* Nombre d'octets disponibles */ + const bin_t *val; /* Valeur lue à faire suivre */ + + content = G_BIN_CONTENT(pygobject_get(self)); + assert(content != NULL); + + init_vmpa(&start, 0, VMPA_NO_VIRTUAL); + + length = g_binary_content_compute_size(content); + + val = g_binary_content_get_raw_access(content, &start, length); + assert(val != NULL); + + result = PyBytes_FromStringAndSize((char *)val, length); + + return result; + +} + + +/****************************************************************************** +* * * Paramètres : - * * * * Description : Fournit un accès à une définition de type à diffuser. * @@ -409,6 +450,11 @@ PyTypeObject *get_python_binary_content_type(void) }; static PyGetSetDef py_binary_content_getseters[] = { + { + "data", py_binary_content_get_all_bytes, NULL, + "Provide all the content bytes at once.", NULL + }, + { NULL } }; -- cgit v0.11.2-87-g4458