diff options
Diffstat (limited to 'plugins/pychrysa/pychrysa.c')
-rw-r--r-- | plugins/pychrysa/pychrysa.c | 179 |
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; + +} |