summaryrefslogtreecommitdiff
path: root/plugins/pychrysa/analysis/block.c
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2018-01-16 19:02:56 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2018-01-16 19:02:56 (GMT)
commit9da8f8b37e3edebc917b4e223dd2447cd7cbc818 (patch)
tree3f330b13e7ca2a0a163882be3043ca9571f25211 /plugins/pychrysa/analysis/block.c
parenteb9b7fd76451db5c9f07a800c0394480e4b88c9c (diff)
Changed the Python bindings source directory and updated code.
Diffstat (limited to 'plugins/pychrysa/analysis/block.c')
-rw-r--r--plugins/pychrysa/analysis/block.c274
1 files changed, 0 insertions, 274 deletions
diff --git a/plugins/pychrysa/analysis/block.c b/plugins/pychrysa/analysis/block.c
deleted file mode 100644
index edd364d..0000000
--- a/plugins/pychrysa/analysis/block.c
+++ /dev/null
@@ -1,274 +0,0 @@
-
-/* Chrysalide - Outil d'analyse de fichiers binaires
- * block.c - équivalent Python du fichier "analysis/block.c"
- *
- * Copyright (C) 2013-2017 Cyrille Bagard
- *
- * This file is part of Chrysalide.
- *
- * Chrysalide 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.
- *
- * Chrysalide 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 "block.h"
-
-
-#include <pygobject.h>
-
-
-#include <analysis/block.h>
-
-
-#include "../helpers.h"
-
-
-
-/* Permet la jonction entre C et Python lors des visites */
-typedef struct _py_block_vdata
-{
- PyObject *func; /* Fonction à appeler */
- PyObject *user; /* Donnée à faire suivre */
-
-} py_block_vdata;
-
-
-/* Parcourt le bloc d'instructions dans un ordre donné. */
-static bool py_block_visitor_glue(GInstrBlock *, BlockVisitOrder, py_block_vdata *);
-
-/* Parcourt tous les blocs d'instructions dans un ordre donné. */
-static PyObject *py_instructions_block_visit(PyObject *, PyObject *);
-
-/* Fournit l'ensemble contenant les blocs liés. */
-static PyObject *py_instructions_block_get_links_block(PyObject *, PyObject *);
-
-/* Définit les constantes pour les blocs basiques. */
-static bool py_instructions_block_define_constants(PyTypeObject *);
-
-
-
-/******************************************************************************
-* *
-* Paramètres : block = bloc d'instructions concerné par la visite. *
-* order = indication sur la position dans le parcours. *
-* data = donnée utilisateur à associer au parcours. *
-* *
-* Description : Parcourt le bloc d'instructions dans un ordre donné. *
-* *
-* Retour : true si le parcours a été jusqu'à son terme, false sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static bool py_block_visitor_glue(GInstrBlock *block, BlockVisitOrder order, py_block_vdata *data)
-{
- bool result; /* Bilan à retourner */
- PyObject *args; /* Arguments pour l'appel */
- PyObject *value; /* Retour obtenu */
-
- Py_INCREF(data->user);
-
- args = PyTuple_New(3);
- PyTuple_SetItem(args, 0, pygobject_new(G_OBJECT(block)));
- PyTuple_SetItem(args, 1, PyLong_FromLong(order));
- PyTuple_SetItem(args, 2, data->user);
-
- value = _run_python_method(data->func, args);
- result = (value == Py_True);
-
- Py_XDECREF(value);
- Py_DECREF(args);
-
- return result;
-
-}
-
-
-
-/******************************************************************************
-* *
-* Paramètres : self = classe représentant un binaire. *
-* args = arguments fournis à l'appel. *
-* *
-* Description : Parcourt tous les blocs d'instructions dans un ordre donné. *
-* *
-* Retour : True si le parcours a été jusqu'à son terme, False sinon. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static PyObject *py_instructions_block_visit(PyObject *self, PyObject *args)
-{
- PyObject *result; /* Conclusion à retourner */
- py_block_vdata data; /* Transition entre C et Python*/
- int ret; /* Bilan de lecture des args. */
- GInstrBlock *block; /* Point de départ des visites */
- bool status; /* Bilan du parcours */
-
- ret = PyArg_ParseTuple(args, "OO", &data.func, &data.user);
- if (!ret) Py_RETURN_NONE;
-
- if (PyCallable_Check(data.func) != 1) return NULL;
-
- block = G_INSTR_BLOCK(pygobject_get(self));
- status = g_instr_block_visit(block, (instr_block_visitor_cb)py_block_visitor_glue, &data);
-
- result = (status ? Py_True : Py_False);
- Py_INCREF(result);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : self = classe représentant un binaire. *
-* args = arguments fournis à l'appel. *
-* *
-* Description : Fournit l'ensemble contenant les blocs liés. *
-* *
-* Retour : Bloc contenant les blocs liés au bloc. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static PyObject *py_instructions_block_get_links_block(PyObject *self, PyObject *args)
-{
- PyObject *result; /* Conclusion à retourner */
- GInstrBlock *block; /* Point de départ des visites */
-
- block = G_INSTR_BLOCK(pygobject_get(self));
-
- block = g_instr_block_get_links_block(block);
-
- result = pygobject_new(G_OBJECT(block));
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : obj_type = type dont le dictionnaire est à compléter. *
-* *
-* Description : Définit les constantes pour les blocs basiques. *
-* *
-* Retour : - *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static bool py_instructions_block_define_constants(PyTypeObject *obj_type)
-{
- bool result; /* Bilan à retourner */
-
- result = true;
-
- result &= PyDict_AddIntMacro(obj_type, BVO_IN);
- result &= PyDict_AddIntMacro(obj_type, BVO_PENDING);
- result &= PyDict_AddIntMacro(obj_type, BVO_OUT);
-
- return result;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : - *
-* *
-* Description : Fournit un accès à une définition de type à diffuser. *
-* *
-* Retour : Définition d'objet pour Python. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-PyTypeObject *get_python_instr_block_type(void)
-{
- static PyMethodDef py_instr_block_methods[] = {
- {
- "visit", (PyCFunction)py_instructions_block_visit,
- METH_VARARGS,
- "visit($self, cb, data, /)\n--\n\nVisit all the basic blocks, starting at the provided one."
- },
- {
- "get_links_block", (PyCFunction)py_instructions_block_get_links_block,
- METH_VARARGS,
- "get_links_block($self, /)\n--\n\nGet the block containing all blocks linked to the caller."
- },
- { NULL }
- };
-
- static PyGetSetDef py_instr_block_getseters[] = {
- { NULL }
- };
-
- static PyTypeObject py_instr_block_type = {
-
- PyVarObject_HEAD_INIT(NULL, 0)
-
- .tp_name = "pychrysalide.analysis.InstrBlock",
-
- .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
-
- .tp_doc = "PyChrysalide basic block",
-
- .tp_methods = py_instr_block_methods,
- .tp_getset = py_instr_block_getseters,
-
- };
-
- return &py_instr_block_type;
-
-}
-
-
-/******************************************************************************
-* *
-* Paramètres : module = module dont la définition est à compléter. *
-* *
-* Description : Prend en charge l'objet 'pychrysalide.analysis.InstrBlock'. *
-* *
-* Retour : Bilan de l'opération. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-bool register_python_instr_block(PyObject *module)
-{
- PyTypeObject *py_instr_block_type; /* Type Python 'InstrBlock' */
- PyObject *dict; /* Dictionnaire du module */
-
- py_instr_block_type = get_python_instr_block_type();
-
- dict = PyModule_GetDict(module);
-
- if (!register_class_for_pygobject(dict, G_TYPE_INSTR_BLOCK, py_instr_block_type, &PyGObject_Type))
- return false;
-
- if (!py_instructions_block_define_constants(py_instr_block_type))
- return false;
-
- return true;
-
-}