summaryrefslogtreecommitdiff
path: root/plugins/pychrysa/pychrysa.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/pychrysa/pychrysa.c')
-rw-r--r--plugins/pychrysa/pychrysa.c179
1 files changed, 177 insertions, 2 deletions
diff --git a/plugins/pychrysa/pychrysa.c b/plugins/pychrysa/pychrysa.c
index f2dbf0f..865c0fc 100644
--- a/plugins/pychrysa/pychrysa.c
+++ b/plugins/pychrysa/pychrysa.c
@@ -24,10 +24,12 @@
#include "pychrysa.h"
+#if 0
+
#include <dirent.h>
#include <pygobject.h>
#include <string.h>
-#include <pygtk/pygtk.h>
+//#include <pygtk/pygtk.h>
#include <config.h>
@@ -252,8 +254,33 @@ PluginAction get_plugin_action(const GPluginModule *plugin)
* *
******************************************************************************/
-PyMODINIT_FUNC PyInit_pychrysa(void)
+PyMODINIT_FUNC initpychrysa/*PyInit_pychrysa*/(void)
{
+ PyObject *module;
+
+ //init_pygobject();
+ //init_pygtk();
+
+ pychrysalide_init_quirks();
+
+ module = Py_InitModule("pychrysalide", SpamMethods);
+
+ //add_analysis_roptions_to_python_module(module);
+ add_analysis_module_to_python_module(module);
+ add_arch_module_to_python_module(module);
+ add_debug_module_to_python_module(module);
+ add_format_module_to_python_module(module);
+ add_glibext_module_to_python_module(module);
+ add_gtkext_module_to_python_module(module);
+ add_gui_module_to_python_module(module);
+
+ add_plugin_to_python_module(module);
+
+
+ /*
+
+
+
static struct PyModuleDef spammodule = {
PyModuleDef_HEAD_INIT,
"pychrysalide",
@@ -264,6 +291,8 @@ PyMODINIT_FUNC PyInit_pychrysa(void)
PyModule_Create(&spammodule);
+ */
+
}
#else
@@ -305,3 +334,149 @@ PyMODINIT_FUNC initpychrysa(void)
}
#endif
+
+
+
+#endif
+
+
+
+
+
+
+
+#include <pygobject.h>
+
+
+#include "../../revision.h"
+
+
+#include "analysis/module.h"
+#include "arch/module.h"
+
+
+
+// TODO : à bouger ?
+#include "../../src/arch/processor.h"
+#include "../../src/format/format.h"
+
+
+
+/* Fournit la version du programme global. */
+static PyObject *py_chrysalide_version(PyObject *, PyObject *);
+
+
+
+
+/******************************************************************************
+* *
+* Paramètres : self = NULL car méthode statique. *
+* args = non utilisé ici. *
+* *
+* Description : Fournit la version du programme global. *
+* *
+* Retour : Numéro de révision. *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+static PyObject *py_chrysalide_version(PyObject *self, PyObject *args)
+{
+ char version[16];
+ int major;
+ int minor;
+ int revision;
+
+ major = REVISION / 1000;
+ minor = (REVISION - (major * 1000)) / 100;
+ revision = REVISION % 100;
+
+ snprintf(version, sizeof(version), "%d.%d.%d", major, minor, revision);
+
+ return PyUnicode_FromString(version);
+
+}
+
+
+
+
+
+
+
+/******************************************************************************
+* *
+* Paramètres : - *
+* *
+* Description : Point d'entrée pour l'initialisation de Python. *
+* *
+* Retour : ? *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+PyMODINIT_FUNC PyInit_pychrysalide(void)
+{
+ PyObject *result; /* Module Python à retourner */
+ PyObject *pygobj_mod; /* Module Python-GObject */
+ bool status; /* Bilan des inclusions */
+
+ static PyMethodDef py_chrysalide_methods[] = {
+
+ { "version", py_chrysalide_version,
+ METH_NOARGS,
+ "Provide the revision number of Chrysalide."
+ },
+ { "python", py_chrysalide_version,
+ METH_NOARGS,
+ "Provide the revision number of Chrysalide module for Python."
+ },
+ { NULL }
+
+ };
+
+ static PyModuleDef py_chrysalide_module = {
+
+ .m_base = PyModuleDef_HEAD_INIT,
+
+ .m_name = "pychrysalide",
+ .m_doc = "Python module for Chrysalide",
+
+ .m_size = -1,
+
+ .m_methods = py_chrysalide_methods
+
+ };
+
+
+ // TODO : à bouger !
+ init_all_processors();
+ init_all_formats();
+
+
+ if (pygobject_init(-1, -1, -1) == NULL)
+ return NULL;
+
+ /**
+ * Pour une raison non identifiée, si le module n'est pas préchargé,
+ * le flot d'exécution plante dans la fonction insertdict() de Objects/dictobject.c:818.
+ */
+ pygobj_mod = PyImport_ImportModule("gi.repository.GObject");
+ if (pygobj_mod == NULL)
+ return NULL;
+
+ result = PyModule_Create(&py_chrysalide_module);
+
+ status = true;
+
+ status &= add_analysis_module_to_python_module(result);
+ status &= add_arch_module_to_python_module(result);
+
+ printf("status :: %d\n", status);
+
+ /* TODO : if !status... */
+
+ return result;
+
+}