diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2020-02-18 22:24:55 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2020-02-18 22:24:55 (GMT) |
commit | d6b2e6639698674cbdaf7dc2e5f5a637abcfadb0 (patch) | |
tree | 13394ab4695d8f4b60195961f24dd498c6bcbbe6 /plugins/pychrysalide/arch/raw.c | |
parent | 95e204291faa4800781d2f302c41f86a3f01851d (diff) |
Relocated the raw instructions.
Diffstat (limited to 'plugins/pychrysalide/arch/raw.c')
-rw-r--r-- | plugins/pychrysalide/arch/raw.c | 331 |
1 files changed, 0 insertions, 331 deletions
diff --git a/plugins/pychrysalide/arch/raw.c b/plugins/pychrysalide/arch/raw.c deleted file mode 100644 index 43f2e5e..0000000 --- a/plugins/pychrysalide/arch/raw.c +++ /dev/null @@ -1,331 +0,0 @@ - -/* Chrysalide - Outil d'analyse de fichiers binaires - * raw.c - équivalent Python du fichier "arch/raw.h" - * - * Copyright (C) 2018-2020 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 "raw.h" - - -#include <pygobject.h> - - -#include <arch/raw.h> - - -#include "constants.h" -#include "instruction.h" -#include "../access.h" -#include "../helpers.h" - - - -#define RAW_INSTRUCTION_DOC \ - "The RawInstruction object handles data which is not (yet?) disassembled" \ - " as code in a binary." - - -/* Indique si le contenu de l'instruction est du bourrage. */ -static PyObject *py_raw_instruction_get_padding(PyObject *, void *); - -/* Marque l'instruction comme ne contenant que du bourrage. */ -static int py_raw_instruction_set_padding(PyObject *, PyObject *, void *); - -/* Indique si le contenu de l'instruction est un texte. */ -static PyObject *py_raw_instruction_get_string(PyObject *, void *); - -/* Marque l'instruction comme contenant une chaîne de texte. */ -static int py_raw_instruction_set_string(PyObject *, PyObject *, void *); - - - -/****************************************************************************** -* * -* Paramètres : self = classe représentant une instruction. * -* closure = adresse non utilisée ici. * -* * -* Description : Indique si le contenu de l'instruction est du bourrage. * -* * -* Retour : Valeur associée à la propriété consultée. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_raw_instruction_get_padding(PyObject *self, void *closure) -{ - PyObject *result; /* Conversion à retourner */ - GRawInstruction *instr; /* Version native */ - bool state; /* Etat courant à consulter */ - -#define RAW_INSTRUCTION_PADDING_ATTRIB PYTHON_GETSET_DEF_FULL \ -( \ - padding, py_raw_instruction, \ - "Report if the instruction is seen as padding." \ -) - - instr = G_RAW_INSTRUCTION(pygobject_get(self)); - - state = g_raw_instruction_is_padding(instr); - - result = state ? Py_True : Py_False; - Py_INCREF(result); - - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : self = objet Python concerné par l'appel. * -* value = valeur fournie à intégrer ou prendre en compte. * -* closure = adresse non utilisée ici. * -* * -* Description : Marque l'instruction comme ne contenant que du bourrage. * -* * -* Retour : Bilan de l'opération pour Python. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static int py_raw_instruction_set_padding(PyObject *self, PyObject *value, void *closure) -{ - bool state; /* Nouvel état à définir */ - GRawInstruction *instr; /* Version native */ - - if (value != Py_True && value != Py_False) - return -1; - - state = (value == Py_True); - - instr = G_RAW_INSTRUCTION(pygobject_get(self)); - - g_raw_instruction_mark_as_padding(instr, state); - - return 0; - -} - - -/****************************************************************************** -* * -* Paramètres : self = classe représentant une instruction. * -* closure = adresse non utilisée ici. * -* * -* Description : Indique si le contenu de l'instruction est un texte. * -* * -* Retour : Valeur associée à la propriété consultée. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static PyObject *py_raw_instruction_get_string(PyObject *self, void *closure) -{ - PyObject *result; /* Conversion à retourner */ - GRawInstruction *instr; /* Version native */ - bool state; /* Etat courant à consulter */ - -#define RAW_INSTRUCTION_STRING_ATTRIB PYTHON_GETSET_DEF_FULL \ -( \ - string, py_raw_instruction, \ - "Report if the instruction is seen as a string." \ -) - - instr = G_RAW_INSTRUCTION(pygobject_get(self)); - - state = g_raw_instruction_is_string(instr); - - result = state ? Py_True : Py_False; - Py_INCREF(result); - - - return result; - -} - - -/****************************************************************************** -* * -* Paramètres : self = objet Python concerné par l'appel. * -* value = valeur fournie à intégrer ou prendre en compte. * -* closure = adresse non utilisée ici. * -* * -* Description : Marque l'instruction comme contenant une chaîne de texte. * -* * -* Retour : Bilan de l'opération pour Python. * -* * -* Remarques : - * -* * -******************************************************************************/ - -static int py_raw_instruction_set_string(PyObject *self, PyObject *value, void *closure) -{ - bool state; /* Nouvel état à définir */ - GRawInstruction *instr; /* Version native */ - - if (value != Py_True && value != Py_False) - return -1; - - state = (value == Py_True); - - instr = G_RAW_INSTRUCTION(pygobject_get(self)); - - g_raw_instruction_mark_as_string(instr, state); - - return 0; - -} - - -/****************************************************************************** -* * -* Paramètres : - * -* * -* Description : Fournit un accès à une définition de type à diffuser. * -* * -* Retour : Définition d'objet pour Python. * -* * -* Remarques : - * -* * -******************************************************************************/ - -PyTypeObject *get_python_raw_instruction_type(void) -{ - static PyMethodDef py_raw_instruction_methods[] = { - { NULL } - }; - - static PyGetSetDef py_raw_instruction_getseters[] = { - RAW_INSTRUCTION_PADDING_ATTRIB, - RAW_INSTRUCTION_STRING_ATTRIB, - { NULL } - }; - - static PyTypeObject py_raw_instruction_type = { - - PyVarObject_HEAD_INIT(NULL, 0) - - .tp_name = "pychrysalide.arch.RawInstruction", - .tp_basicsize = sizeof(PyGObject), - - .tp_flags = Py_TPFLAGS_DEFAULT, - - .tp_doc = RAW_INSTRUCTION_DOC, - - .tp_methods = py_raw_instruction_methods, - .tp_getset = py_raw_instruction_getseters, - - }; - - return &py_raw_instruction_type; - -} - - -/****************************************************************************** -* * -* Paramètres : module = module dont la définition est à compléter. * -* * -* Description : Prend en charge l'objet 'pychrysalide.arch.ArchInstruction'. * -* * -* Retour : Bilan de l'opération. * -* * -* Remarques : - * -* * -******************************************************************************/ - -bool ensure_python_raw_instruction_is_registered(void) -{ - PyTypeObject *type; /* Type Python 'RawInstruction'*/ - PyObject *module; /* Module à recompléter */ - PyObject *dict; /* Dictionnaire du module */ - - type = get_python_raw_instruction_type(); - - if (!PyType_HasFeature(type, Py_TPFLAGS_READY)) - { - module = get_access_to_python_module("pychrysalide.arch"); - - dict = PyModule_GetDict(module); - - if (!ensure_python_arch_instruction_is_registered()) - return false; - - if (!register_class_for_pygobject(dict, G_TYPE_RAW_INSTRUCTION, type, get_python_arch_instruction_type())) - return false; - - if (!define_raw_instruction_constants(type)) - return false; - - } - - return true; - -} - - -/****************************************************************************** -* * -* Paramètres : arg = argument quelconque à tenter de convertir. * -* dst = destination des valeurs récupérées en cas de succès. * -* * -* Description : Tente de convertir en instruction brute. * -* * -* Retour : Bilan de l'opération, voire indications supplémentaires. * -* * -* Remarques : - * -* * -******************************************************************************/ - -int convert_to_raw_instruction(PyObject *arg, void *dst) -{ - int result; /* Bilan à retourner */ - - result = PyObject_IsInstance(arg, (PyObject *)get_python_raw_instruction_type()); - - switch (result) - { - case -1: - /* L'exception est déjà fixée par Python */ - result = 0; - break; - - case 0: - PyErr_SetString(PyExc_TypeError, "unable to convert the provided argument to raw instruction"); - break; - - case 1: - *((GRawInstruction **)dst) = G_RAW_INSTRUCTION(pygobject_get(arg)); - break; - - default: - assert(false); - break; - - } - - return result; - -} |