diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2017-11-27 22:18:12 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2017-11-27 22:18:12 (GMT) |
commit | 046c2cfac39e686dee65cdf54035dc5a975bc57f (patch) | |
tree | ca578f4576c58a57aa257d5140cdeeeaabb3b7b0 /plugins/pychrysa/format | |
parent | 903006678160f620b947d5fbce2a8e257a357d77 (diff) |
Added offset and address translations to the Python bindings.
Diffstat (limited to 'plugins/pychrysa/format')
-rw-r--r-- | plugins/pychrysa/format/executable.c | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/plugins/pychrysa/format/executable.c b/plugins/pychrysa/format/executable.c index 96b5e82..1b1bfe8 100644 --- a/plugins/pychrysa/format/executable.c +++ b/plugins/pychrysa/format/executable.c @@ -33,9 +33,106 @@ #include "format.h" #include "../helpers.h" +#include "../arch/vmpa.h" +/* Fournit l'emplacement correspondant à une position physique. */ +static PyObject *py_exe_format_translate_offset_into_vmpa(PyObject *, PyObject *); + +/* Fournit l'emplacement correspondant à une adresse virtuelle. */ +static PyObject *py_exe_format_translate_address_into_vmpa(PyObject *, PyObject *); + + + +/****************************************************************************** +* * +* Paramètres : self = description de l'exécutable à consulter. * +* args = arguments accompagnant l'appel. * +* * +* Description : Fournit l'emplacement correspondant à une position physique. * +* * +* Retour : Position correspondante ou None. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static PyObject *py_exe_format_translate_offset_into_vmpa(PyObject *self, PyObject *args) +{ + PyObject *result; /* Instance à retourner */ + GExeFormat *format; /* Version GLib du format */ + unsigned long long off; /* Adresse en mémoire virtuelle*/ + int ret; /* Bilan de lecture des args. */ + vmpa2t pos; /* Position complète déterminée*/ + bool status; /* Bilan de l'opération */ + + format = G_EXE_FORMAT(pygobject_get(self)); + assert(format != NULL); + + ret = PyArg_ParseTuple(args, "K", &off); + if (!ret) return NULL; + + status = g_exe_format_translate_offset_into_vmpa(format, off, &pos); + + if (status) + result = build_from_internal_vmpa(&pos); + + else + { + result = Py_None; + Py_INCREF(result); + } + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : self = description de l'exécutable à consulter. * +* args = arguments accompagnant l'appel. * +* * +* Description : Fournit l'emplacement correspondant à une adresse virtuelle. * +* * +* Retour : Position correspondante ou None. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static PyObject *py_exe_format_translate_address_into_vmpa(PyObject *self, PyObject *args) +{ + PyObject *result; /* Instance à retourner */ + GExeFormat *format; /* Version GLib du format */ + unsigned long long addr; /* Adresse en mémoire virtuelle*/ + int ret; /* Bilan de lecture des args. */ + vmpa2t pos; /* Position complète déterminée*/ + bool status; /* Bilan de l'opération */ + + format = G_EXE_FORMAT(pygobject_get(self)); + assert(format != NULL); + + ret = PyArg_ParseTuple(args, "K", &addr); + if (!ret) return NULL; + + status = g_exe_format_translate_address_into_vmpa(format, addr, &pos); + + if (status) + result = build_from_internal_vmpa(&pos); + + else + { + result = Py_None; + Py_INCREF(result); + } + + return result; + +} + + /****************************************************************************** * * * Paramètres : - * @@ -51,6 +148,16 @@ PyTypeObject *get_python_executable_format_type(void) { static PyMethodDef py_exe_format_methods[] = { + { + "translate_offset_into_vmpa", py_exe_format_translate_offset_into_vmpa, + METH_VARARGS, + "translate_offset_into_vmpa($self, off, /)\n--\n\nTranslate a physical offset to a full location.." + }, + { + "translate_address_into_vmpa", py_exe_format_translate_address_into_vmpa, + METH_VARARGS, + "translate_address_into_vmpa($self, addr, /)\n--\n\nTranslate a physical offset to a full location.." + }, { NULL } }; |