diff options
Diffstat (limited to 'plugins/elf/python/dynamic.c')
-rw-r--r-- | plugins/elf/python/dynamic.c | 79 |
1 files changed, 79 insertions, 0 deletions
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; + +} |