diff options
Diffstat (limited to 'plugins/pychrysa')
-rw-r--r-- | plugins/pychrysa/analysis/Makefile.am | 3 | ||||
-rw-r--r-- | plugins/pychrysa/analysis/exporter-int.h | 53 | ||||
-rw-r--r-- | plugins/pychrysa/analysis/exporter.c | 284 | ||||
-rw-r--r-- | plugins/pychrysa/analysis/exporter.h | 44 | ||||
-rw-r--r-- | plugins/pychrysa/analysis/line.c | 793 | ||||
-rw-r--r-- | plugins/pychrysa/analysis/line.h | 61 |
6 files changed, 0 insertions, 1238 deletions
diff --git a/plugins/pychrysa/analysis/Makefile.am b/plugins/pychrysa/analysis/Makefile.am index 123279b..f5322e8 100644 --- a/plugins/pychrysa/analysis/Makefile.am +++ b/plugins/pychrysa/analysis/Makefile.am @@ -3,9 +3,6 @@ noinst_LTLIBRARIES = libpychrysaanalysis.la libpychrysaanalysis_la_SOURCES = \ binary.h binary.c \ - exporter-int.h \ - exporter.h exporter.c \ - line.h line.c \ module.h module.c \ roptions.h roptions.c diff --git a/plugins/pychrysa/analysis/exporter-int.h b/plugins/pychrysa/analysis/exporter-int.h deleted file mode 100644 index 2498d4b..0000000 --- a/plugins/pychrysa/analysis/exporter-int.h +++ /dev/null @@ -1,53 +0,0 @@ - -/* OpenIDA - Outil d'analyse de fichiers binaires - * exporter-int.h - prototypes internes pour l'équivalent Python du fichier "analysis/exporter.h" - * - * Copyright (C) 2010 Cyrille Bagard - * - * This file is part of OpenIDA. - * - * 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_EXPORTER_INT_H -#define _PLUGINS_PYOIDA_ANALYSIS_EXPORTER_INT_H - - -#include <Python.h> - -#include <analysis/exporter.h> - - - -/* Classe 'analysis.exporter' pour Python */ -typedef struct _py_exporter -{ - PyObject_HEAD - - GContentExporter *glib; /* Interface version GLib */ - -} py_exporter; - - -#define PY_EXPORTER(exp) ((py_exporter *)exp) - - -/* Fournit le type d'objet 'analysis.exporter' pour Python. */ -PyTypeObject *get_analysis_exporter_type(void); - - - -#endif /* _PLUGINS_PYOIDA_ANALYSIS_EXPORTER_INT_H */ diff --git a/plugins/pychrysa/analysis/exporter.c b/plugins/pychrysa/analysis/exporter.c deleted file mode 100644 index 8c49542..0000000 --- a/plugins/pychrysa/analysis/exporter.c +++ /dev/null @@ -1,284 +0,0 @@ - -/* OpenIDA - Outil d'analyse de fichiers binaires - * exporter.c - équivalent Python du fichier "analysis/exporter.h" - * - * Copyright (C) 2010 Cyrille Bagard - * - * This file is part of OpenIDA. - * - * 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 "exporter.h" - - -#include <fcntl.h> -#include <stdio.h> -#include <unistd.h> - - -#include "exporter-int.h" -#include "../analysis/roptions.h" - - - - -#define PY_EXPORT_TEXT_BUFLEN 64 - - -/* Crée un nouvel objet Python de type 'py_exporter'. */ -static PyObject *py_exporter_new(PyTypeObject *, PyObject *, PyObject *); - - - - -/* Fournit le texte correspondant à un contenu rendu. */ -static PyObject *py_exporter_get_text(py_exporter *, 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 'py_exporter'. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_exporter_new(PyTypeObject *type, PyObject *args, PyObject *kwds) -{ - py_exporter *result; /* Instance à retourner */ - - result = (py_exporter *)type->tp_alloc(type, 0); - - return (PyObject *)result; - -} - - -/****************************************************************************** -* * -* Paramètres : exporter = objet GLib existant à transposer. * -* * -* Description : Crée un nouvel objet Python de type 'py_exporter'. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -PyObject *py_exporter_new_from_existing(GContentExporter *exporter) -{ - py_exporter *result; /* Instance à retourner */ - PyTypeObject *type; /* Type Python à instancier */ - - result = (py_exporter *)g_object_get_data(G_OBJECT(exporter), "python_object"); - - if (result == NULL) - { - type = get_analysis_exporter_type(); - - result = (py_exporter *)type->tp_alloc(type, 0); - - result->glib = exporter; - g_object_ref(exporter); - - g_object_set_data(G_OBJECT(exporter), "python_object", result); - - } - else Py_INCREF((PyObject *)result); - - return (PyObject *)result; - -} - - - - - -/****************************************************************************** -* * -* Paramètres : self = instance manipulée à traiter. * -* args = arguments fournis à l'appel. * -* * -* Description : Fournit le texte correspondant à un contenu rendu. * -* * -* Retour : Chaîne de caractères Python. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_exporter_get_text(py_exporter *self, PyObject *args) -{ - PyObject *result; /* Liste à retourner */ - PyObject *roptions; /* Options de rendu jointes */ - int ret; /* Bilan de lecture des args. */ - GRenderingOptions *_roptions; /* Version GLib des options */ - int fd[2]; /* Tube pour récupérer le code */ - FILE *stream; /* Flux (ré)ouvert en écriture */ - char buffer[PY_EXPORT_TEXT_BUFLEN]; /* Tampon pour la lecture */ - ssize_t len; /* Nombre de caractères lus */ - PyObject *src; /* Source ajoutée au résultat */ - - ret = PyArg_ParseTuple(args, "O", &roptions); - if (!ret) return Py_None; - - _roptions = py_rendering_options_get_glib_instance(roptions); - - result = Py_None; - - ret = pipe2(fd, O_NONBLOCK); - //if (ret ... perror("pipe"); goto pegt_pipe_error; - - - stream = fdopen(fd[1], "w"); - if (stream == NULL) - { - perror("stream"); - goto pegt_stream_error; - } - - g_content_exporter_add_text(self->glib, _roptions, MRD_BLOCK/* FIXME*/, stream); - fflush(stream); - - do - { - memset(buffer, 0, PY_EXPORT_TEXT_BUFLEN); - len = read(fd[0], buffer, PY_EXPORT_TEXT_BUFLEN); - - src = PyString_FromString(buffer); - - if (result == Py_None) result = src; - else PyString_ConcatAndDel(&result, src); - - } - while (len > 0); - - fclose(stream); - - pegt_stream_error: - - close(fd[0]); - //close(fd[1]); - - pegt_pipe_error: - - return result; - -} - - - - - - - - - - - - -/****************************************************************************** -* * -* Paramètres : - * -* * -* Description : Fournit le type d'objet 'analysis.exporter' pour Python. * -* * -* Retour : Adresse du type vivant à manipuler. * -* * -* Remarques : - * -* * -******************************************************************************/ - -PyTypeObject *get_analysis_exporter_type(void) -{ - static PyTypeObject *result = NULL; /* Type pour objet à retourner */ - - static PyMethodDef py_exporter_methods[] = { - { - "get_text", (PyCFunction)py_exporter_get_text, - METH_VARARGS, - "Provide the text version of the rendered content." - }, - { NULL } - }; - - static PyGetSetDef py_exporter_getset[] = { - { NULL } - }; - - static PyTypeObject py_exporter_type = { - - PyObject_HEAD_INIT(NULL) - - .tp_name = "pyoida.analysis.Exporter", - .tp_basicsize = sizeof(py_exporter), - - .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, - - .tp_doc = "PyOIDA exporter interface", - - .tp_methods = py_exporter_methods, - .tp_getset = py_exporter_getset, - .tp_new = (newfunc)py_exporter_new - - }; - - if (result == NULL) result = &py_exporter_type; - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : module = module dont la définition est à compléter. * -* * -* Description : Ajoute l'objet 'analysis.exporter' au module Python. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool add_analysis_exporter_to_python_module(PyObject *module) -{ - PyTypeObject *py_exporter_type; /* Type défini pour Python */ - int ret; /* Bilan d'un appel */ - - py_exporter_type = get_analysis_exporter_type(); - - if (PyType_Ready(py_exporter_type) < 0) - return false; - - Py_INCREF(py_exporter_type); - ret = PyModule_AddObject(module, "Exporter", (PyObject *)py_exporter_type); - - return (ret == 0); - -} diff --git a/plugins/pychrysa/analysis/exporter.h b/plugins/pychrysa/analysis/exporter.h deleted file mode 100644 index 4668934..0000000 --- a/plugins/pychrysa/analysis/exporter.h +++ /dev/null @@ -1,44 +0,0 @@ - -/* OpenIDA - Outil d'analyse de fichiers binaires - * exporter.h - prototypes pour l'équivalent Python du fichier "analysis/exporter.h" - * - * Copyright (C) 2010 Cyrille Bagard - * - * This file is part of OpenIDA. - * - * 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_EXPORTER_H -#define _PLUGINS_PYOIDA_ANALYSIS_EXPORTER_H - - -#include <Python.h> -#include <stdbool.h> - -#include <analysis/exporter.h> - - - -/* Crée un nouvel objet Python de type 'py_exporter'. */ -PyObject *py_exporter_new_from_existing(GContentExporter *); - -/* Ajoute l'objet 'analysis.exporter' au module Python. */ -bool add_analysis_exporter_to_python_module(PyObject *); - - - -#endif /* _PLUGINS_PYOIDA_ANALYSIS_EXPORTER_H */ diff --git a/plugins/pychrysa/analysis/line.c b/plugins/pychrysa/analysis/line.c deleted file mode 100644 index fd697e2..0000000 --- a/plugins/pychrysa/analysis/line.c +++ /dev/null @@ -1,793 +0,0 @@ - -/* OpenIDA - Outil d'analyse de fichiers binaires - * line.c - équivalent Python du fichier "analysis/line.h" - * - * Copyright (C) 2010 Cyrille Bagard - * - * This file is part of OpenIDA. - * - * 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 "line.h" - - -#include "exporter-int.h" -#include "../arch/archbase.h" - - - - - - - -/* Classe 'analysis.line' pour Python */ -typedef struct _py_line -{ - py_exporter parent; /* A laisser en premier */ - - GRenderingLine *line; /* Référence GLib */ - -} py_line; - - - - -/* Crée un nouvel objet Python de type 'py_line'. */ -static PyObject *py_line_new(PyTypeObject *, PyObject *, PyObject *); - - - - - - -/* Fournit le type d'objet 'analysis.line' pour Python. */ -static PyTypeObject *get_analysis_line_type(void); - - - -/* Prépare un parcours de lignes. */ -static PyObject *py_line_get_iter(py_line *); - -/* Prépare un parcours de lignes en sens inverse. */ -static PyObject *py_line_get_riter(py_line *); - - - -/* Fournit l'adresse physique ou en mémoire d'une ligne. */ -static PyObject *py_line_get_address(py_line *, void *); - -/* Fournit le commentaire associé à la ligne s'il existe. */ -static PyObject *py_line_get_comment(py_line *, void *); - -/* Définit ou supprime un commentaire pour la ligne indiquée. */ -static int py_line_set_comment(py_line *, PyObject *, void *); - - - - - -/* ---------------------- ITERATEUR POUR LE PARCOURS DE LIGNES ---------------------- */ - - -/* Itérateur pour lignes de rendu */ -typedef struct _py_line_iter -{ - PyObject_HEAD /* A laisser en premier */ - - GRenderingLine *head; /* Liste à parcourir */ - GRenderingLine *cur; /* Point de parcours courant */ - -} py_line_iter; - - -/* Fournit le type d'objet 'analysis.LineIter' pour Python. */ -static PyTypeObject *get_analysis_line_iter_type(void); - -/* Prépare l'itérateur pour un parcours de lignes de rendu. */ -static PyObject *py_line_iter_new(GRenderingLine *); - -/* Libère la mémoire occupée par un itérateur de 'py_line'. */ -static void py_line_iter_dealloc(py_line_iter *); - -/* Fournit l'élément suivant dans un parcours de lignes. */ -static PyObject *py_line_iter_get_next(py_line_iter *); - - - -/* ---------------------- ITERATEUR POUR LE PARCOURS DE LIGNES ---------------------- */ - - -/* Itérateur pour lignes de rendu */ -typedef py_line_iter py_line_riter; - - -/* Fournit le type d'objet 'analysis.LineRevIter' pour Python. */ -static PyTypeObject *get_analysis_line_riter_type(void); - -/* Prépare l'itérateur pour un parcours de lignes de rendu. */ -static PyObject *py_line_riter_new(GRenderingLine *); - -/* Libère la mémoire occupée par un itérateur de 'py_line'. */ -static void py_line_riter_dealloc(py_line_riter *); - -/* Fournit l'élément précédant dans un parcours de lignes. */ -static PyObject *py_line_riter_get_prev(py_line_riter *); - - - - - - - - - - - - - - - - -/****************************************************************************** -* * -* 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 'py_line'. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_line_new(PyTypeObject *type, PyObject *args, PyObject *kwds) -{ - py_line *result; /* Instance à retourner */ - - result = (py_line *)type->tp_alloc(type, 0); - - return (PyObject *)result; - -} - - -/****************************************************************************** -* * -* Paramètres : line = objet GLib existant à transposer. * -* * -* Description : Crée un nouvel objet Python de type 'py_line'. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -PyObject *py_line_new_from_existing(GRenderingLine *line) -{ - py_line *result; /* Instance à retourner */ - PyTypeObject *type; /* Type Python à instancier */ - - result = (py_line *)g_object_get_data(G_OBJECT(line), "python_object"); - - if (result == NULL) - { - type = get_analysis_line_type(); - - result = (py_line *)type->tp_alloc(type, 0); - - PY_EXPORTER(result)->glib = G_CONTENT_EXPORTER(line); /* TODO : move me ! */ - - result->line = line; - g_object_ref(line); - - g_object_set_data(G_OBJECT(line), "python_object", result); - - } - else Py_INCREF((PyObject *)result); - - return (PyObject *)result; - -} - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/****************************************************************************** -* * -* Paramètres : - * -* * -* Description : Fournit le type d'objet 'analysis.line' pour Python. * -* * -* Retour : Adresse du type vivant à manipuler. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyTypeObject *get_analysis_line_type(void) -{ - static PyTypeObject *result = NULL; /* Type pour objet à retourner */ - - static PyMethodDef py_line_methods[] = { - { - "__reversed__", (PyCFunction)py_line_get_riter, - METH_NOARGS, - "Return a reverse iterator over the rendering lines." - }, - { NULL } - }; - - static PyGetSetDef py_line_getset[] = { - { - "address", - (getter)py_line_get_address, - (setter)NULL, - "Get the physical or virtual address relative to the line." - }, - { - "comment", - (getter)py_line_get_comment, - (setter)py_line_set_comment, - "Get or set a comment for the rendering line." - }, - { NULL } - }; - - static PyTypeObject py_line_type = { - - PyObject_HEAD_INIT(NULL) - - .tp_name = "pyoida.analysis.Line", - .tp_basicsize = sizeof(py_line), - - .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, - - .tp_doc = "PyOIDA rendering line", - - .tp_iter = (getiterfunc)py_line_get_iter, - - .tp_methods = py_line_methods, - .tp_getset = py_line_getset, - .tp_new = (newfunc)py_line_new - - }; - - if (result == NULL) - { - py_line_type.tp_base = get_analysis_exporter_type(); - result = &py_line_type; - } - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : module = module dont la définition est à compléter. * -* * -* Description : Ajoute l'objet 'analysis.line' au module Python. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool add_analysis_line_to_python_module(PyObject *module) -{ - PyTypeObject *py_line_type; /* Type défini pour Python */ - int ret; /* Bilan d'un appel */ - - py_line_type = get_analysis_line_type(); - - if (PyType_Ready(py_line_type) < 0) - return false; - - Py_INCREF(py_line_type); - ret = PyModule_AddObject(module, "Line", (PyObject *)py_line_type); - - return (ret == 0); - -} - - - - - - - - -/****************************************************************************** -* * -* Paramètres : self = instance manipulée à traiter. * -* * -* Description : Prépare un parcours de lignes. * -* * -* Retour : Point de départ d'un parcours. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_line_get_iter(py_line *self) -{ - return (PyObject *)py_line_iter_new(self->line); - -} - - -/****************************************************************************** -* * -* Paramètres : self = instance manipulée à traiter. * -* * -* Description : Prépare un parcours de lignes en sens inverse. * -* * -* Retour : Point de départ d'un parcours. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_line_get_riter(py_line *self) -{ - return (PyObject *)py_line_riter_new(self->line); - -} - - - - - -/****************************************************************************** -* * -* Paramètres : self = classe présentant une ligne de rendu. * -* data = adresse non utilisée ici. * -* * -* Description : Fournit l'adresse physique ou en mémoire d'une ligne. * -* * -* Retour : Position physique ou en mémoire associée à la ligne. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_line_get_address(py_line *self, void *data) -{ - vmpa_t value; /* Adresse à convertir */ - - value = get_rendering_line_address(self->line); - - return py_vmpa_new_from_existing(value); - -} - - -/****************************************************************************** -* * -* Paramètres : self = classe présentant une ligne de rendu. * -* data = adresse non utilisée ici. * -* * -* Description : Fournit le commentaire associé à la ligne s'il existe. * -* * -* Retour : Chaîne de caractères ou NULL. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_line_get_comment(py_line *self, void *data) -{ - const char *comment; /* Commentaire à transmettre */ - - comment = get_rendering_line_comment(self->line); - - return Py_BuildValue("s", comment); - -} - - -/****************************************************************************** -* * -* Paramètres : self = classe présentant des options de représentation. * -* value = nouvelle valeur affectée. * -* data = adresse non utilisée ici. * -* * -* Description : Définit ou supprime un commentaire pour la ligne indiquée. * -* * -* Retour : Bilan de la mise à jour. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static int py_line_set_comment(py_line *self, PyObject *value, void *data) -{ - char *comment; /* Commentaire à définir */ - - comment = PyString_AsString(value); - /* FIXME : nil pour supprimer ? */ - - set_rendering_line_comment(self->line, comment); - - return 0; - -} - - - - - - - - - - - - - - - -/* ---------------------------------------------------------------------------------- */ -/* ITERATEUR POUR LE PARCOURS DE LIGNES */ -/* ---------------------------------------------------------------------------------- */ - - -/****************************************************************************** -* * -* Paramètres : - * -* * -* Description : Fournit le type d'objet 'analysis.LineIter' pour Python. * -* * -* Retour : Adresse du type vivant à manipuler. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyTypeObject *get_analysis_line_iter_type(void) -{ - static PyTypeObject *result = NULL; /* Type pour objet à retourner */ - - static PyTypeObject py_line_iter_type = { - - PyObject_HEAD_INIT(NULL) - - .tp_name = "pyoida.analysis.LineIter", - .tp_basicsize = sizeof(py_line_iter), - - .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, - - .tp_doc = "PyOIDA iterator for rendering lines", - - .tp_iter = PyObject_SelfIter, - .tp_iternext = (iternextfunc)py_line_iter_get_next - - }; - - if (result == NULL) result = &py_line_iter_type; - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : module = module dont la définition est à compléter. * -* * -* Description : Ajoute l'objet 'analysis.LineIter' au module Python. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool add_analysis_line_iter_to_python_module(PyObject *module) -{ - PyTypeObject *py_line_iter_type; /* Type défini pour Python */ - int ret; /* Bilan d'un appel */ - - py_line_iter_type = get_analysis_line_iter_type(); - - if (PyType_Ready(py_line_iter_type) < 0) - return false; - - Py_INCREF(py_line_iter_type); - ret = PyModule_AddObject(module, "Iter", (PyObject *)py_line_iter_type); - - return (ret == 0); - -} - - -/****************************************************************************** -* * -* Paramètres : head = liste à parcourir. * -* * -* Description : Prépare l'itérateur pour un parcours de lignes de rendu. * -* * -* Retour : Instance d'itérateur prête à emploi. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_line_iter_new(GRenderingLine *head) -{ - py_line_iter *result; /* Nouvelle instance à renvoyer*/ - PyTypeObject *type; /* Type d'objet à créer */ - - type = get_analysis_line_iter_type(); - - result = (py_line_iter *)type->tp_alloc(type, 0); - - if (result != NULL) - { - result->head = head; - result->cur = NULL; - } - - return (PyObject *)result; - -} - - -/****************************************************************************** -* * -* Paramètres : self = instance d'objet à supprimer. * -* * -* Description : Libère la mémoire occupée par un itérateur de 'py_line'. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void py_line_iter_dealloc(py_line_iter *self) -{ -#if PY_VERSION_HEX < 0x03000000 - self->ob_type->tp_free((PyObject *)self); -#else - Py_TYPE(self)->tp_free((PyObject *)self); -#endif - -} - - -/****************************************************************************** -* * -* Paramètres : self = instance manipulée à traiter. * -* * -* Description : Fournit l'élément suivant dans un parcours de lignes. * -* * -* Retour : Point suivant du parcours ou NULL. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_line_iter_get_next(py_line_iter *self) -{ - PyObject *result; /* Elément à retourner */ - GRenderingLine *next; /* Elément réel suivant */ - - if (self->cur == NULL) next = self->head; - else next = g_rendering_line_get_next_iter(self->head, self->cur, NULL); - - if (next != NULL) - { - self->cur = next; - result = py_line_new_from_existing(next); - Py_INCREF(result); - } - else result = NULL; - - return (PyObject *)result; - -} - -/* ---------------------------------------------------------------------------------- */ -/* ITERATEUR POUR LE PARCOURS DE LIGNES */ -/* ---------------------------------------------------------------------------------- */ - - -/****************************************************************************** -* * -* Paramètres : - * -* * -* Description : Fournit le type d'objet 'analysis.LineRevIter' pour Python. * -* * -* Retour : Adresse du type vivant à manipuler. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyTypeObject *get_analysis_line_riter_type(void) -{ - static PyTypeObject *result = NULL; /* Type pour objet à retourner */ - - static PyTypeObject py_line_riter_type = { - - PyObject_HEAD_INIT(NULL) - - .tp_name = "pyoida.analysis.LineRevIter", - .tp_basicsize = sizeof(py_line_riter), - - .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, - - .tp_doc = "PyOIDA iterator for rendering lines", - - .tp_iter = PyObject_SelfIter, - .tp_iternext = (iternextfunc)py_line_riter_get_prev - - }; - - if (result == NULL) result = &py_line_riter_type; - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : module = module dont la définition est à compléter. * -* * -* Description : Ajoute l'objet 'analysis.LineRevIter' au module Python. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool add_analysis_line_riter_to_python_module(PyObject *module) -{ - PyTypeObject *py_line_riter_type; /* Type défini pour Python */ - int ret; /* Bilan d'un appel */ - - py_line_riter_type = get_analysis_line_riter_type(); - - if (PyType_Ready(py_line_riter_type) < 0) - return false; - - Py_INCREF(py_line_riter_type); - ret = PyModule_AddObject(module, "RevIter", (PyObject *)py_line_riter_type); - - return (ret == 0); - -} - - -/****************************************************************************** -* * -* Paramètres : head = liste à parcourir. * -* * -* Description : Prépare l'itérateur pour un parcours de lignes de rendu. * -* * -* Retour : Instance d'itérateur prête à emploi. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_line_riter_new(GRenderingLine *head) -{ - py_line_riter *result; /* Nouvelle instance à renvoyer*/ - PyTypeObject *type; /* Type d'objet à créer */ - - type = get_analysis_line_riter_type(); - - result = (py_line_riter *)type->tp_alloc(type, 0); - - if (result != NULL) - { - result->head = head; - result->cur = NULL; - } - - return (PyObject *)result; - -} - - -/****************************************************************************** -* * -* Paramètres : self = instance d'objet à supprimer. * -* * -* Description : Libère la mémoire occupée par un itérateur de 'py_line'. * -* * -* Retour : - * -* * -* Remarques : - * -* * -******************************************************************************/ - -static void py_line_riter_dealloc(py_line_riter *self) -{ -#if PY_VERSION_HEX < 0x03000000 - self->ob_type->tp_free((PyObject *)self); -#else - Py_TYPE(self)->tp_free((PyObject *)self); -#endif - -} - - -/****************************************************************************** -* * -* Paramètres : self = instance manipulée à traiter. * -* * -* Description : Fournit l'élément précédant dans un parcours de lignes. * -* * -* Retour : Point suivant du parcours ou NULL. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_line_riter_get_prev(py_line_riter *self) -{ - PyObject *result; /* Elément à retourner */ - GRenderingLine *prev; /* Elément réel précédant */ - - if (self->cur == NULL) prev = g_rendering_line_get_last_iter(self->head, NULL); - else prev = g_rendering_line_get_prev_iter(self->head, self->cur, NULL); - - if (prev != NULL) - { - self->cur = prev; - result = py_line_new_from_existing(prev); - Py_INCREF(result); - } - else result = NULL; - - return (PyObject *)result; - -} diff --git a/plugins/pychrysa/analysis/line.h b/plugins/pychrysa/analysis/line.h deleted file mode 100644 index e71596c..0000000 --- a/plugins/pychrysa/analysis/line.h +++ /dev/null @@ -1,61 +0,0 @@ - -/* OpenIDA - Outil d'analyse de fichiers binaires - * line.h - prototypes pour l'équivalent Python du fichier "analysis/line.h" - * - * Copyright (C) 2010 Cyrille Bagard - * - * This file is part of OpenIDA. - * - * 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_LINE_H -#define _PLUGINS_PYOIDA_ANALYSIS_LINE_H - - -#include <Python.h> -#include <stdbool.h> - -#include <analysis/line.h> - - - -/* Crée un nouvel objet Python de type 'py_line'. */ -PyObject *py_line_new_from_existing(GRenderingLine *); - -/* Ajoute l'objet 'analysis.line' au module Python. */ -bool add_analysis_line_to_python_module(PyObject *); - - - - -/* ---------------------- ITERATEUR POUR LE PARCOURS DE LIGNES ---------------------- */ - - -/* Ajoute l'objet 'analysis.LineIter' au module Python. */ -bool add_analysis_line_iter_to_python_module(PyObject *); - - - -/* ---------------------- ITERATEUR POUR LE PARCOURS DE LIGNES ---------------------- */ - - -/* Ajoute l'objet 'analysis.LineRevIter' au module Python. */ -bool add_analysis_line_riter_to_python_module(PyObject *); - - - -#endif /* _PLUGINS_PYOIDA_ANALYSIS_LINE_H */ |