summaryrefslogtreecommitdiff
path: root/plugins/pychrysa/analysis
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2015-09-11 20:40:24 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2015-09-11 20:40:24 (GMT)
commit18648e4e8763a3bc005d6fae51eae3d1528d7d29 (patch)
tree05feca5b6c5575b2a048b60130e3207b9f2c355a /plugins/pychrysa/analysis
parent9f8c79e3b272960b48bfd85a24f4b5cb5651df2d (diff)
Created an interface from the original GBinContent object.
git-svn-id: svn://svn.gna.org/svn/chrysalide/trunk@576 abbe820e-26c8-41b2-8c08-b7b2b41f8b0a
Diffstat (limited to 'plugins/pychrysa/analysis')
-rw-r--r--plugins/pychrysa/analysis/Makefile.am4
-rw-r--r--plugins/pychrysa/analysis/content.c297
-rw-r--r--plugins/pychrysa/analysis/content.h42
-rw-r--r--plugins/pychrysa/analysis/contents/Makefile.am14
-rw-r--r--plugins/pychrysa/analysis/contents/file.c199
-rw-r--r--plugins/pychrysa/analysis/contents/file.h42
-rw-r--r--plugins/pychrysa/analysis/contents/module.c92
-rw-r--r--plugins/pychrysa/analysis/contents/module.h39
-rw-r--r--plugins/pychrysa/analysis/module.c4
9 files changed, 732 insertions, 1 deletions
diff --git a/plugins/pychrysa/analysis/Makefile.am b/plugins/pychrysa/analysis/Makefile.am
index 8b0609d..c014dfd 100644
--- a/plugins/pychrysa/analysis/Makefile.am
+++ b/plugins/pychrysa/analysis/Makefile.am
@@ -4,12 +4,14 @@ noinst_LTLIBRARIES = libpychrysaanalysis.la
libpychrysaanalysis_la_SOURCES = \
binary.h binary.c \
block.h block.c \
+ content.h content.c \
module.h module.c \
routine.h routine.c
libpychrysaanalysis_la_LIBADD = \
binaries/libpychrysaanalysisbinaries.la \
blocks/libpychrysaanalysisblocks.la \
+ contents/libpychrysaanalysiscontents.la \
db/libpychrysaanalysisdb.la
libpychrysaanalysis_la_LDFLAGS =
@@ -20,4 +22,4 @@ AM_CPPFLAGS = $(LIBGTK_CFLAGS) $(LIBXML_CFLAGS) $(LIBPYTHON_CFLAGS) $(LIBPYGOBJE
AM_CFLAGS = $(DEBUG_CFLAGS) $(WARNING_FLAGS) $(COMPLIANCE_FLAGS)
-SUBDIRS = binaries blocks db
+SUBDIRS = binaries blocks contents db
diff --git a/plugins/pychrysa/analysis/content.c b/plugins/pychrysa/analysis/content.c
new file mode 100644
index 0000000..a37aa44
--- /dev/null
+++ b/plugins/pychrysa/analysis/content.c
@@ -0,0 +1,297 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * content.c - prototypes pour l'équivalent Python du fichier "analysis/content.c"
+ *
+ * Copyright (C) 2015 Cyrille Bagard
+ *
+ * This file is part of Chrysalide.
+ *
+ * OpenIDA is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * OpenIDA is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
+#include "content.h"
+
+
+#include <pygobject.h>
+
+
+#include <analysis/content.h>
+
+
+
+/* Fournit une empreinte unique (SHA256) pour les données. */
+static PyObject *py_binary_content_get_checksum(PyObject *, PyObject *);
+
+/* Détermine le nombre d'octets lisibles. */
+static PyObject *py_binary_content_compute_size(PyObject *, PyObject *);
+
+/* Lit un nombre non signé sur un octet. */
+static PyObject *py_binary_content_read_u8(PyObject *, PyObject *);
+
+
+
+/******************************************************************************
+* *
+* Paramètres : self = contenu binaire à manipuler. *
+* args = non utilisé ici. *
+* *
+* Description : Fournit une empreinte unique (SHA256) pour les données. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static PyObject *py_binary_content_get_checksum(PyObject *self, PyObject *args)
+{
+ PyObject *result; /* Instance à retourner */
+ GBinContent *content; /* Version GLib du format */
+ const gchar *checksum; /* Empreinte fournie */
+
+ content = G_BIN_CONTENT(pygobject_get(self));
+
+ //checksum = g_binary_content_get_cheksum(content);
+
+ printf("YEAH\n");
+ fflush(NULL);
+
+ result = PyUnicode_FromString("checksum");
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : self = contenu binaire à manipuler. *
+* args = non utilisé ici. *
+* *
+* Description : Détermine le nombre d'octets lisibles. *
+* *
+* Retour : Quantité représentée. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static PyObject *py_binary_content_compute_size(PyObject *self, PyObject *args)
+{
+ PyObject *result; /* Instance à retourner */
+ GBinContent *content; /* Version GLib du format */
+ phys_t size; /* Quantité d'octets dispos. */
+
+ content = G_BIN_CONTENT(pygobject_get(self));
+
+ size = g_binary_content_compute_size(content);
+
+ result = PyLong_FromUnsignedLongLong(size);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : self = contenu binaire à manipuler. *
+* args = non utilisé ici. *
+* *
+* Description : Lit un nombre non signé sur un octet. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static PyObject *py_binary_content_read_u8(PyObject *self, PyObject *args)
+{
+ PyObject *result; /* Instance à retourner */
+ GBinContent *content; /* Version GLib du format */
+ int ret; /* Bilan de lecture des args. */
+ PyObject *addr_obj; /* Objet pour une position */
+ vmpa2t *addr; /* Position interne associée */
+ uint8_t val; /* Valeur lue à faire suivre */
+ bool status; /* Bilan de l'opération */
+
+ content = G_BIN_CONTENT(pygobject_get(self));
+
+ //printf("Passage\n");
+
+ ret = PyArg_ParseTuple(args, "O", &addr_obj);
+
+ //printf("ret == %d\n", ret);
+
+ if (!ret) return NULL;
+
+ addr = get_internal_vmpa(addr_obj);
+ if (addr == NULL) /* ... */;
+
+ status = g_binary_content_read_u8(content, addr, &val);
+ if (!status) return NULL;
+
+ //printf("val :: 0x%02hhx\n", val);
+
+ result = PyBytes_FromStringAndSize((char *)&val, 1);;
+ //Py_INCREF(result);
+
+ return result;
+
+}
+
+
+
+
+/******************************************************************************
+* *
+* Paramètres : - *
+* *
+* Description : Fournit un accès à une définition de type à diffuser. *
+* *
+* Retour : Définition d'objet pour Python. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+
+static PyMethodDef py_binary_content_methods[] = {
+ { "get_checksum", py_binary_content_get_checksum,
+ METH_NOARGS,
+ "get_checksum($self, /)\n--\n\nCompute a SHA256 hash as chechsum of handled data."
+ },
+ { "compute_size", py_binary_content_compute_size,
+ METH_NOARGS,
+ "compute_size($self, /)\n--\n\nCompute the quantity of readable bytes."
+ },
+ { "read_u8", py_binary_content_read_u8,
+ METH_VARARGS,
+ "read_u8($self, addr, /)\n--\n\nRead an unsigned byte from a given position."
+ },
+ { NULL }
+};
+
+static PyGetSetDef py_binary_content_getseters[] = {
+ { NULL }
+};
+
+PyTypeObject py_binary_content_type = {
+
+ PyVarObject_HEAD_INIT(NULL, 0)
+
+ .tp_name = "pychrysalide.analysis.contents.BinContent",
+ .tp_basicsize = sizeof(PyObject),
+
+ .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+
+ .tp_doc = "PyChrysalide binary content",
+
+ .tp_methods = py_binary_content_methods,
+ //.tp_getset = py_binary_content_getseters
+
+};
+
+
+
+PyTypeObject *get_python_binary_content_type(void)
+{
+#if 0
+ static PyMethodDef py_binary_content_methods[] = {
+ { "get_checksum", py_binary_content_get_checksum,
+ METH_NOARGS,
+ "get_checksum($self, /)\n--\n\nCompute a SHA256 hash as chechsum of handled data."
+ },
+ { "compute_size", py_binary_content_compute_size,
+ METH_NOARGS,
+ "compute_size($self, /)\n--\n\nCompute the quantity of readable bytes."
+ },
+ { "read_u8", py_binary_content_read_u8,
+ METH_VARARGS,
+ "read_u8($self, addr, /)\n--\n\nRead an unsigned byte from a given position."
+ },
+ { NULL }
+ };
+
+ static PyGetSetDef py_binary_content_getseters[] = {
+ { NULL }
+ };
+
+ static PyTypeObject py_binary_content_type = {
+
+ PyVarObject_HEAD_INIT(NULL, 0)
+
+ .tp_name = "pychrysalide.analysis.contents.BinContent",
+ .tp_basicsize = sizeof(PyObject),
+
+ .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+
+ .tp_doc = "PyChrysalide binary content",
+
+ .tp_methods = py_binary_content_methods,
+ //.tp_getset = py_binary_content_getseters
+
+ };
+#endif
+ return &py_binary_content_type;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : module = module dont la définition est à compléter. *
+* *
+* Description : Prend en charge l'objet 'pychrysalide.glibext.BinContent'. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+bool register_python_binary_content(PyObject *module)
+{
+ PyTypeObject *py_binary_content_type; /* Type Python 'BinContent' */
+ int ret; /* Bilan d'un appel */
+ PyObject *dict; /* Dictionnaire du module */
+
+ py_binary_content_type = get_python_binary_content_type();
+
+ //py_binary_content_type->tp_base = &PyGObject_Type;
+ //py_binary_content_type->tp_basicsize = py_binary_content_type->tp_base->tp_basicsize;
+
+ //py_binary_content_type->tp_base = &PyObject_Type;
+ //py_binary_content_type->tp_basicsize = py_binary_content_type->tp_base->tp_basicsize;
+
+ /*
+ if (PyType_Ready(py_binary_content_type) != 0)
+ return false;
+ */
+
+ /*
+ Py_INCREF(py_binary_content_type);
+ ret = PyModule_AddObject(module, "BinContent", (PyObject *)py_binary_content_type);
+ if (ret != 0) return false;
+ */
+
+ dict = PyModule_GetDict(module);
+ pyg_register_interface(dict, "BinContent", G_TYPE_BIN_CONTENT, py_binary_content_type);
+
+ return true;
+
+}
diff --git a/plugins/pychrysa/analysis/content.h b/plugins/pychrysa/analysis/content.h
new file mode 100644
index 0000000..230bfe1
--- /dev/null
+++ b/plugins/pychrysa/analysis/content.h
@@ -0,0 +1,42 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * content.h - prototypes pour l'équivalent Python du fichier "analysis/content.h"
+ *
+ * Copyright (C) 2015 Cyrille Bagard
+ *
+ * This file is part of Chrysalide.
+ *
+ * OpenIDA is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * OpenIDA is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
+#ifndef _PLUGINS_PYCHRYSA_ANALYSIS_CONTENT_H
+#define _PLUGINS_PYCHRYSA_ANALYSIS_CONTENT_H
+
+
+#include <Python.h>
+#include <stdbool.h>
+
+
+
+/* Fournit un accès à une définition de type à diffuser. */
+PyTypeObject *get_python_binary_content_type(void);
+
+/* Prend en charge l'objet 'pychrysalide.glibext.BinContent'. */
+bool register_python_binary_content(PyObject *);
+
+
+
+#endif /* _PLUGINS_PYCHRYSA_ANALYSIS_CONTENT_H */
diff --git a/plugins/pychrysa/analysis/contents/Makefile.am b/plugins/pychrysa/analysis/contents/Makefile.am
new file mode 100644
index 0000000..ff835e3
--- /dev/null
+++ b/plugins/pychrysa/analysis/contents/Makefile.am
@@ -0,0 +1,14 @@
+
+noinst_LTLIBRARIES = libpychrysaanalysiscontents.la
+
+libpychrysaanalysiscontents_la_SOURCES = \
+ file.h file.c \
+ module.h module.c
+
+libpychrysaanalysiscontents_la_LDFLAGS =
+
+
+AM_CPPFLAGS = $(LIBGTK_CFLAGS) $(LIBXML_CFLAGS) $(LIBPYTHON_CFLAGS) $(LIBPYGOBJECT_CFLAGS) \
+ -I../../../../src
+
+AM_CFLAGS = $(DEBUG_CFLAGS) $(WARNING_FLAGS) $(COMPLIANCE_FLAGS)
diff --git a/plugins/pychrysa/analysis/contents/file.c b/plugins/pychrysa/analysis/contents/file.c
new file mode 100644
index 0000000..b145662
--- /dev/null
+++ b/plugins/pychrysa/analysis/contents/file.c
@@ -0,0 +1,199 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * file.c - prototypes pour l'équivalent Python du fichier "analysis/contents/file.c"
+ *
+ * Copyright (C) 2015 Cyrille Bagard
+ *
+ * This file is part of Chrysalide.
+ *
+ * OpenIDA is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * OpenIDA is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
+#include "file.h"
+
+
+#include <pygobject.h>
+
+
+#include <analysis/contents/file.h>
+
+
+
+/* Crée un nouvel objet Python de type 'BinContent'. */
+static PyObject *py_file_content_new(PyTypeObject *, PyObject *, PyObject *);
+
+
+
+/******************************************************************************
+* *
+* Paramètres : type = type de l'objet à instancier. *
+* args = arguments fournis à l'appel. *
+* kwds = arguments de type key=val fournis. *
+* *
+* Description : Crée un nouvel objet Python de type 'BinContent'. *
+* *
+* Retour : Instance Python mise en place. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static PyObject *py_file_content_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+ PyObject *result; /* Instance à retourner */
+ const char *filename; /* Nom du fichier à charger */
+ int ret; /* Bilan de lecture des args. */
+ GBinContent *content; /* Version GLib du contenu */
+
+ ret = PyArg_ParseTuple(args, "s", &filename);
+ if (!ret) Py_RETURN_NONE;
+
+ content = g_file_content_new(filename);
+
+ result = pygobject_new(G_OBJECT(content));
+ g_object_unref(content);
+
+ return result;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : - *
+* *
+* Description : Fournit un accès à une définition de type à diffuser. *
+* *
+* Retour : Définition d'objet pour Python. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+
+
+PyMethodDef py_file_content_methods[] = {
+ { NULL }
+};
+
+PyGetSetDef py_file_content_getseters[] = {
+ { NULL }
+};
+
+PyTypeObject py_file_content_type = {
+
+ PyVarObject_HEAD_INIT(NULL, 0)
+
+ .tp_name = "pychrysalide.analysis.contents.FileContent",
+ .tp_basicsize = sizeof(PyGObject),
+
+ .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+
+ .tp_doc = "PyChrysalide binary file content",
+
+ /*
+ .tp_methods = py_file_content_methods,
+ .tp_getset = py_file_content_getseters,
+ .tp_new = (newfunc)py_file_content_new
+ */
+
+};
+
+
+
+PyTypeObject *get_python_file_content_type(void)
+{
+#if 0
+ static PyMethodDef py_file_content_methods[] = {
+ { NULL }
+ };
+
+ static PyGetSetDef py_file_content_getseters[] = {
+ { NULL }
+ };
+
+ static PyTypeObject py_file_content_type = {
+
+ PyVarObject_HEAD_INIT(NULL, 0)
+
+ .tp_name = "pychrysalide.analysis.contents.FileContent",
+ .tp_basicsize = sizeof(PyGObject),
+
+ .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | 1 << 9,
+
+ .tp_doc = "PyChrysalide binary file content",
+
+ /*
+ .tp_methods = py_file_content_methods,
+ .tp_getset = py_file_content_getseters,
+ .tp_new = (newfunc)py_file_content_new
+ */
+
+ };
+#endif
+ return &py_file_content_type;
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : module = module dont la définition est à compléter. *
+* *
+* Description : Prend en charge l'objet 'pychrysalide.glibext.BinContent'. *
+* *
+* Retour : Bilan de l'opération. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+#include "../content.h"
+bool register_python_file_content(PyObject *module)
+{
+ PyTypeObject *py_file_content_type; /* Type Python 'BinContent' */
+ int ret; /* Bilan d'un appel */
+ PyObject *dict; /* Dictionnaire du module */
+
+ py_file_content_type = get_python_file_content_type();
+
+ //py_file_content_type->tp_base = &PyGObject_Type;
+ //py_file_content_type->tp_basicsize = py_file_content_type->tp_base->tp_basicsize;
+
+ /*
+ if (PyType_Ready(py_file_content_type) != 0)
+ return false;
+ */
+
+ /*
+ Py_INCREF(py_file_content_type);
+ ret = PyModule_AddObject(module, "FileContent", (PyObject *)py_file_content_type);
+ if (ret != 0) return false;
+ */
+
+ dict = PyModule_GetDict(module);
+ pygobject_register_class(dict, "FileContent", G_TYPE_FILE_CONTENT, py_file_content_type,
+ Py_BuildValue("(O)", &PyGObject_Type/*py_file_content_type->tp_base*/,
+ get_python_binary_content_type()));
+
+ /*
+ if (PyType_Ready(py_file_content_type) != 0)
+ return false;
+ */
+
+
+ return true;
+
+}
diff --git a/plugins/pychrysa/analysis/contents/file.h b/plugins/pychrysa/analysis/contents/file.h
new file mode 100644
index 0000000..a9edcef
--- /dev/null
+++ b/plugins/pychrysa/analysis/contents/file.h
@@ -0,0 +1,42 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * file.h - prototypes pour l'équivalent Python du fichier "analysis/contents/file.h"
+ *
+ * Copyright (C) 2015 Cyrille Bagard
+ *
+ * This file is part of Chrysalide.
+ *
+ * OpenIDA is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * OpenIDA is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
+#ifndef _PLUGINS_PYCHRYSA_ANALYSIS_CONTENTS_FILE_H
+#define _PLUGINS_PYCHRYSA_ANALYSIS_CONTENTS_FILE_H
+
+
+#include <Python.h>
+#include <stdbool.h>
+
+
+
+/* Fournit un accès à une définition de type à diffuser. */
+PyTypeObject *get_python_file_content_type(void);
+
+/* Prend en charge l'objet 'pychrysalide.glibext.BinContent'. */
+bool register_python_file_content(PyObject *);
+
+
+
+#endif /* _PLUGINS_PYCHRYSA_ANALYSIS_CONTENTS_FILE_H */
diff --git a/plugins/pychrysa/analysis/contents/module.c b/plugins/pychrysa/analysis/contents/module.c
new file mode 100644
index 0000000..f97ba27
--- /dev/null
+++ b/plugins/pychrysa/analysis/contents/module.c
@@ -0,0 +1,92 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * module.c - intégration du répertoire contents en tant que module
+ *
+ * Copyright (C) 2013 Cyrille Bagard
+ *
+ * This file is part of Chrysalide.
+ *
+ * OpenIDA is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * OpenIDA is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
+#include "module.h"
+
+
+#include <assert.h>
+
+
+#include "file.h"
+
+
+
+/******************************************************************************
+* *
+* Paramètres : module = module dont la définition est à compléter. *
+* *
+* Description : Ajoute le module 'contents' au module Python. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+#include "../content.h"
+bool add_analysis_contents_module_to_python_module(PyObject *super)
+{
+ bool result; /* Bilan à retourner */
+ PyObject *module; /* Sous-module mis en place */
+ int ret; /* Bilan d'un appel */
+
+ static PyModuleDef py_chrysalide_contents_module = {
+
+ .m_base = PyModuleDef_HEAD_INIT,
+
+ .m_name = "pychrysalide.analysis.contents",
+ .m_doc = "Python module for Chrysalide.analysis.contents",
+
+ .m_size = -1,
+
+ };
+
+ result = false;
+
+ module = PyModule_Create(&py_chrysalide_contents_module);
+ if (module == NULL) return false;
+
+ ret = PyState_AddModule(super, &py_chrysalide_contents_module);
+ if (ret != 0) goto loading_failed;
+
+ ret = _PyImport_FixupBuiltin(module, "pychrysalide.analysis.contents");
+ if (ret != 0) goto loading_failed;
+
+ Py_INCREF(module);
+ ret = PyModule_AddObject(super, "contents", module);
+ if (ret != 0) goto loading_failed;
+
+ result = true;
+
+ result &= register_python_binary_content(module);
+
+
+ result &= register_python_file_content(module);
+
+ loading_failed:
+
+ assert(result);
+
+ return result;
+
+}
diff --git a/plugins/pychrysa/analysis/contents/module.h b/plugins/pychrysa/analysis/contents/module.h
new file mode 100644
index 0000000..35ff722
--- /dev/null
+++ b/plugins/pychrysa/analysis/contents/module.h
@@ -0,0 +1,39 @@
+
+/* Chrysalide - Outil d'analyse de fichiers binaires
+ * module.h - prototypes pour l'intégration du répertoire contents en tant que module
+ *
+ * Copyright (C) 2013 Cyrille Bagard
+ *
+ * This file is part of Chrysalide.
+ *
+ * OpenIDA is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * OpenIDA is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+
+#ifndef _PLUGINS_PYOIDA_ANALYSIS_CONTENTS_MODULE_H
+#define _PLUGINS_PYOIDA_ANALYSIS_CONTENTS_MODULE_H
+
+
+#include <Python.h>
+#include <stdbool.h>
+
+
+
+/* Ajoute le module 'contents' au module Python. */
+bool add_analysis_contents_module_to_python_module(PyObject *);
+
+
+
+#endif /* _PLUGINS_PYOIDA_ANALYSIS_CONTENTS_MODULE_H */
diff --git a/plugins/pychrysa/analysis/module.c b/plugins/pychrysa/analysis/module.c
index d45a3f1..2520d42 100644
--- a/plugins/pychrysa/analysis/module.c
+++ b/plugins/pychrysa/analysis/module.c
@@ -30,9 +30,11 @@
#include "binary.h"
#include "block.h"
+#include "content.h"
#include "routine.h"
#include "binaries/module.h"
#include "blocks/module.h"
+#include "contents/module.h"
#include "db/module.h"
@@ -85,10 +87,12 @@ bool add_analysis_module_to_python_module(PyObject *super)
result &= register_python_loaded_binary(module);
result &= register_python_instr_block(module);
+ //result &= register_python_binary_content(module);
result &= register_python_binary_routine(module);
result &= add_analysis_binaries_module_to_python_module(module);
result &= add_analysis_blocks_module_to_python_module(module);
+ result &= add_analysis_contents_module_to_python_module(module);
result &= add_analysis_db_module_to_python_module(module);
loading_failed: