diff options
Diffstat (limited to 'plugins/pychrysa/format/executable.c')
-rw-r--r-- | plugins/pychrysa/format/executable.c | 186 |
1 files changed, 34 insertions, 152 deletions
diff --git a/plugins/pychrysa/format/executable.c b/plugins/pychrysa/format/executable.c index 43375ea..d4f2df6 100644 --- a/plugins/pychrysa/format/executable.c +++ b/plugins/pychrysa/format/executable.c @@ -25,61 +25,23 @@ #include "executable.h" -#include "format.h" +#include <pygobject.h> +#include <format/format.h> +#include "../quirks.h" +/* Crée un nouvel objet Python de type 'BinFormat'. */ +static PyObject *py_executable_format_new(PyTypeObject *, PyObject *, PyObject *); -/****************************************************************************** -* * -* Paramètres : format = instance existante GLib. * -* * -* Description : Crée un nouvel objet Python de type 'ExeFormat'. * -* * -* Retour : Instance Python mise en place. * -* * -* Remarques : - * -* * -******************************************************************************/ - -PyObject *py_executable_format_from_c(GExeFormat *format) -{ - return NULL;//py_binary_format_from_c(G_BIN_FORMAT(format)); - -} - - - - - - - - -/* Classe 'format.executable' pour Python */ -typedef struct _py_executable -{ - PyObject_HEAD - - GExeFormat *glib; /* Format d'exécutable GLib */ -} py_executable; - - -/* Crée un nouvel objet Python de type 'py_executable'. */ -static PyObject *py_executable_new(PyTypeObject *, PyObject *, PyObject *); - - - - - -/* Fournit le type d'objet 'format.executable' pour Python. */ -static PyTypeObject *get_format_executable_type(void); +#define _(str) str @@ -90,78 +52,20 @@ static PyTypeObject *get_format_executable_type(void); * args = arguments fournis à l'appel. * * kwds = arguments de type key=val fournis. * * * -* Description : Crée un nouvel objet Python de type 'py_executable'. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_executable_new(PyTypeObject *type, PyObject *args, PyObject *kwds) -{ - py_executable *result; /* Instance à retourner */ - - result = (py_executable *)type->tp_alloc(type, 0); - - return (PyObject *)result; - -} - - -/****************************************************************************** -* * -* Paramètres : executable = objet GLib existant à transposer. * +* Description : Crée un nouvel objet Python de type 'BinFormat'. * * * -* Description : Convertit une instance GLib en objet Python 'py_executable'. * -* * -* Retour : - * +* Retour : Instance Python mise en place. * * * * Remarques : - * * * ******************************************************************************/ -PyObject *py_executable_convert(GExeFormat *executable) +static PyObject *py_executable_format_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { - py_executable *result; /* Instance à retourner */ - PyTypeObject *type; /* Type Python à instancier */ - - result = (py_executable *)g_object_get_data(G_OBJECT(executable), "python_object"); - - if (result == NULL) - { - type = get_format_executable_type(); - - result = (py_executable *)type->tp_alloc(type, 0); - - result->glib = executable; - g_object_ref(executable); - - g_object_set_data(G_OBJECT(executable), "python_object", result); - - } - else Py_INCREF((PyObject *)result); - - return (PyObject *)result; - -} + PyErr_SetString(PyExc_ValueError, + _("pychrysalide.format.ExeFormat can not be instanciated directly")); - -/****************************************************************************** -* * -* Paramètres : executable = instance Python dont la référence est à donner. * -* * -* Description : Fournit l'instance GLib d'une instance Python. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -GExeFormat *py_executable_get_glib_instance(PyObject *executable) -{ - return ((py_executable *)executable)->glib; + return NULL; } @@ -171,81 +75,59 @@ GExeFormat *py_executable_get_glib_instance(PyObject *executable) - - - /****************************************************************************** * * -* Paramètres : - * +* Paramètres : module = module dont la définition est à compléter. * * * -* Description : Fournit le type d'objet 'format.executable' pour Python. * +* Description : Prend en charge l'objet 'pychrysalide.gui.panels.BinFormat'. * * * -* Retour : Adresse du type vivant à manipuler. * +* Retour : Bilan de l'opération. * * * * Remarques : - * * * ******************************************************************************/ -static PyTypeObject *get_format_executable_type(void) +bool register_python_executable_format(PyObject *module) { - static PyTypeObject *result = NULL; /* Type pour objet à retourner */ + PyObject *parent_mod; /* Accès au module parent */ + int ret; /* Bilan d'un appel */ - static PyMethodDef py_executable_methods[] = { + static PyMethodDef py_executable_format_methods[] = { { NULL } }; - static PyGetSetDef py_executable_getset[] = { + static PyGetSetDef py_executable_format_getseters[] = { { NULL } }; - static PyTypeObject py_executable_type = { + static PyTypeObject py_executable_format_type = { PyObject_HEAD_INIT(NULL) - .tp_name = "pyoida.format.Executable", - .tp_basicsize = sizeof(py_executable), + .tp_name = "pychrysalide.format.ExeFormat", + .tp_basicsize = sizeof(PyGObject), .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, - .tp_doc = "PyOIDA loaded executable to analyse", + .tp_doc = "PyChrysalide executable format", - .tp_methods = py_executable_methods, - .tp_getset = py_executable_getset, - .tp_new = (newfunc)py_executable_new + .tp_methods = py_executable_format_methods, + .tp_getset = py_executable_format_getseters, + .tp_new = (newfunc)py_executable_format_new }; - if (result == NULL) result = &py_executable_type; - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : module = module dont la définition est à compléter. * -* * -* Description : Ajoute l'objet 'format.executable' au module Python. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool add_format_executable_to_python_module(PyObject *module) -{ - PyTypeObject *py_executable_type; /* Type défini pour Python */ - int ret; /* Bilan d'un appel */ + parent_mod = PyImport_ImportModule("pychrysalide.format"); + if (parent_mod == NULL) return false; - py_executable_type = get_format_executable_type(); + py_executable_format_type.tp_base = (PyTypeObject *)PyObject_GetAttrString(parent_mod, "BinFormat"); + Py_DECREF(parent_mod); - if (PyType_Ready(py_executable_type) < 0) + if (PyType_Ready(&py_executable_format_type) < 0) return false; - Py_INCREF(py_executable_type); - ret = PyModule_AddObject(module, "Executable", (PyObject *)py_executable_type); + Py_INCREF(&py_executable_format_type); + ret = PyModule_AddObject(module, "ExeFormat", (PyObject *)&py_executable_format_type); return (ret == 0); |