diff options
author | Cyrille Bagard <nocbos@gmail.com> | 2017-11-29 16:24:20 (GMT) |
---|---|---|
committer | Cyrille Bagard <nocbos@gmail.com> | 2017-11-29 16:24:20 (GMT) |
commit | 7fd6e0b76f33de5934fad17efb75366904a3875b (patch) | |
tree | 51ddde83844efe7a653bb33bf93e73d6323c9f45 /plugins/elf/python | |
parent | 046c2cfac39e686dee65cdf54035dc5a975bc57f (diff) |
Provided the list of needed shared objects for an Elf binary.
Diffstat (limited to 'plugins/elf/python')
-rw-r--r-- | plugins/elf/python/Makefile.am | 1 | ||||
-rw-r--r-- | plugins/elf/python/dynamic.c | 79 | ||||
-rw-r--r-- | plugins/elf/python/dynamic.h | 38 | ||||
-rw-r--r-- | plugins/elf/python/format.c | 5 |
4 files changed, 123 insertions, 0 deletions
diff --git a/plugins/elf/python/Makefile.am b/plugins/elf/python/Makefile.am index 91e86f0..bcb739e 100644 --- a/plugins/elf/python/Makefile.am +++ b/plugins/elf/python/Makefile.am @@ -3,6 +3,7 @@ noinst_LTLIBRARIES = libelfpython.la libelfpython_la_SOURCES = \ constants.h constants.c \ + dynamic.h dynamic.c \ format.h format.c \ module.h module.c diff --git a/plugins/elf/python/dynamic.c b/plugins/elf/python/dynamic.c new file mode 100644 index 0000000..b87cba0 --- /dev/null +++ b/plugins/elf/python/dynamic.c @@ -0,0 +1,79 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * utils.c - prototypes pour l'équivalent Python du fichier "plugins/elf/utils.c" + * + * Copyright (C) 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 "dynamic.h" + + +#include <malloc.h> +#include <pygobject.h> + + +#include "../dynamic.h" + + + +/****************************************************************************** +* * +* Paramètres : self = classe représentant un format ELF. * +* closure = adresse non utilisée ici. * +* * +* Description : Fournit la liste des objets partagés requis. * +* * +* Retour : Liste de noms d'objets ou None en cas d'échec. * +* * +* Remarques : - * +* * +******************************************************************************/ + +PyObject *py_elf_format_get_needed(PyObject *self, void *closure) +{ + PyObject *result; /* Liste éventuelle à renvoyer */ + GElfFormat *format; /* Version native */ + size_t count; /* Taille de la liste obtenue */ + const char **needed; /* Objets nécessaires */ + size_t i; /* Boucle de parcours */ + + format = G_ELF_FORMAT(pygobject_get(self)); + + needed = list_elf_needed_objects(format, &count); + + if (count > 0) + { + result = PyTuple_New(count); + + for (i = 0; i < count; i++) + PyTuple_SetItem(result, i, PyUnicode_FromString(needed[i])); + + free(needed); + + } + else + { + result = Py_None; + Py_INCREF(result); + } + + return result; + +} diff --git a/plugins/elf/python/dynamic.h b/plugins/elf/python/dynamic.h new file mode 100644 index 0000000..4656c6d --- /dev/null +++ b/plugins/elf/python/dynamic.h @@ -0,0 +1,38 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * utils.h - prototypes pour l'équivalent Python du fichier "plugins/elf/utils.h" + * + * Copyright (C) 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 + */ + + +#ifndef _PLUGINS_ELF_PYTHON_UTILS_H +#define _PLUGINS_ELF_PYTHON_UTILS_H + + +#include <Python.h> + + + +/* Fournit la liste des objets partagés requis. */ +PyObject *py_elf_format_get_needed(PyObject *, void *); + + + +#endif /* _PLUGINS_ELF_PYTHON_UTILS_H */ diff --git a/plugins/elf/python/format.c b/plugins/elf/python/format.c index 1ff22bd..eb1bedb 100644 --- a/plugins/elf/python/format.c +++ b/plugins/elf/python/format.c @@ -37,6 +37,7 @@ #include "constants.h" +#include "dynamic.h" #include "../format.h" @@ -144,6 +145,10 @@ PyTypeObject *get_python_elf_format_type(void) }; static PyGetSetDef py_elf_format_getseters[] = { + { + "needed", py_elf_format_get_needed, NULL, + "Provide the list of requiered shared objects.", NULL + }, { NULL } }; |