diff options
Diffstat (limited to 'plugins/pe')
-rw-r--r-- | plugins/pe/python/routine.c | 46 | ||||
-rw-r--r-- | plugins/pe/routine.c | 31 | ||||
-rw-r--r-- | plugins/pe/routine.h | 5 | ||||
-rw-r--r-- | plugins/pe/symbols.c | 7 |
4 files changed, 82 insertions, 7 deletions
diff --git a/plugins/pe/python/routine.c b/plugins/pe/python/routine.c index 89075ea..cebeb2a 100644 --- a/plugins/pe/python/routine.c +++ b/plugins/pe/python/routine.c @@ -62,6 +62,9 @@ static int py_pe_exported_routine_set_ordinal(PyObject *, PyObject *, void *); " imported from other PE file symbol." +/* Fournit la position du symbole dans les importations. */ +static PyObject *py_pe_imported_routine_get_index(PyObject *, void *); + /* Fournit le fichier DLL visé par une importation de format PE. */ static PyObject *py_pe_imported_routine_get_library(PyObject *, void *); @@ -285,6 +288,44 @@ int convert_to_pe_exported_routine(PyObject *arg, void *dst) * Paramètres : self = objet Python concerné par l'appel. * * closure = non utilisé ici. * * * +* Description : Fournit la position du symbole dans les importations. * +* * +* Retour : Indice positif ou nul. * +* * +* Remarques : - * +* * +******************************************************************************/ + +static PyObject *py_pe_imported_routine_get_index(PyObject *self, void *closure) +{ + PyObject *result; /* Valeur à retourner */ + GPeImportedRoutine *routine; /* Version native */ + size_t index; /* Position dans les imports */ + +#define PE_IMPORTED_ROUTINE_INDEX_ATTRIB PYTHON_GET_DEF_FULL \ +( \ + index, py_pe_imported_routine, \ + "Position of the symbol inside the importations table.\n" \ + "\n" \ + "The returned value is an integer." \ +) + + routine = G_PE_IMPORTED_ROUTINE(pygobject_get(self)); + + index = g_pe_imported_routine_get_index(routine); + + result = PyLong_FromSize_t(index); + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : self = objet Python concerné par l'appel. * +* closure = non utilisé ici. * +* * * Description : Fournit le fichier DLL visé par une importation de format PE.* * * * Retour : Désignation d'une bibliothèque Windows. * @@ -299,7 +340,7 @@ static PyObject *py_pe_imported_routine_get_library(PyObject *self, void *closur GPeImportedRoutine *routine; /* Version native */ const char *library; /* Nom de bibliothèque */ -#define PE_IMPORTED_ROUTINE_ORDINAL_ATTRIB PYTHON_GETSET_DEF_FULL \ +#define PE_IMPORTED_ROUTINE_LIBRARY_ATTRIB PYTHON_GETSET_DEF_FULL \ ( \ library, py_pe_imported_routine, \ "Imported DLL's name for the symbol.\n" \ @@ -373,7 +414,8 @@ PyTypeObject *get_python_pe_imported_routine_type(void) }; static PyGetSetDef py_pe_imported_routine_getseters[] = { - PE_IMPORTED_ROUTINE_ORDINAL_ATTRIB, + PE_IMPORTED_ROUTINE_INDEX_ATTRIB, + PE_IMPORTED_ROUTINE_LIBRARY_ATTRIB, { NULL } }; diff --git a/plugins/pe/routine.c b/plugins/pe/routine.c index 3f2e5ba..5973487 100644 --- a/plugins/pe/routine.c +++ b/plugins/pe/routine.c @@ -72,6 +72,7 @@ struct _GPeImportedRoutine GPeExportedRoutine parent; /* A laisser en premier */ char *library; /* Bibliothèque de rattachement*/ + size_t index; /* Position dans les imports */ }; @@ -355,7 +356,8 @@ static void g_pe_imported_routine_finalize(GPeImportedRoutine *routine) /****************************************************************************** * * -* Paramètres : name = désignation humainement lisible. * +* Paramètres : name = désignation humainement lisible. * +* index = position du symbole dans les importations. * * * * Description : Crée une représentation de routine importée pour format PE. * * * @@ -365,7 +367,7 @@ static void g_pe_imported_routine_finalize(GPeImportedRoutine *routine) * * ******************************************************************************/ -GPeImportedRoutine *g_pe_imported_routine_new(const char *name) +GPeImportedRoutine *g_pe_imported_routine_new(const char *name, size_t index) { GPeImportedRoutine *result; /* Structure à retourner */ @@ -374,6 +376,31 @@ GPeImportedRoutine *g_pe_imported_routine_new(const char *name) if (name != NULL) g_binary_routine_set_name(G_BIN_ROUTINE(result), strdup(name)); + result->index = index; + + return result; + +} + + +/****************************************************************************** +* * +* Paramètres : routine = routine ayant pour origine un fichier PE. * +* * +* Description : Fournit la position du symbole dans les importations. * +* * +* Retour : Indice positif ou nul. * +* * +* Remarques : - * +* * +******************************************************************************/ + +size_t g_pe_imported_routine_get_index(const GPeImportedRoutine *routine) +{ + size_t result; /* Indice à retourner */ + + result = routine->index; + return result; } diff --git a/plugins/pe/routine.h b/plugins/pe/routine.h index 62faaaa..f0ec71e 100644 --- a/plugins/pe/routine.h +++ b/plugins/pe/routine.h @@ -98,7 +98,10 @@ typedef struct _GPeImportedRoutineClass GPeImportedRoutineClass; GType g_pe_imported_routine_get_type(void); /* Crée une représentation de routine importée pour format PE. */ -GPeImportedRoutine *g_pe_imported_routine_new(const char *); +GPeImportedRoutine *g_pe_imported_routine_new(const char *, size_t); + +/* Fournit la position du symbole dans les importations. */ +size_t g_pe_imported_routine_get_index(const GPeImportedRoutine *); /* Définit le fichier DLL visé par une importation de format PE. */ void g_pe_imported_routine_set_library(GPeImportedRoutine *, const char *); diff --git a/plugins/pe/symbols.c b/plugins/pe/symbols.c index 9217466..94f97a8 100644 --- a/plugins/pe/symbols.c +++ b/plugins/pe/symbols.c @@ -196,6 +196,7 @@ static bool load_pe_imported_symbols(GPeFormat *format, wgroup_id_t gid, GtkStat GBinFormat *base; /* Version basique du format */ GExeFormat *exe; /* Autre vision du format */ const GBinContent *content; /* Contenu binaire à lire */ + size_t counter; /* Compteur d'importations */ image_import_descriptor *iter; /* Boucle de parcours */ vmpa2t dll; /* Nom de la DLL concernée */ bool ret; /* Bilan d'un traitement */ @@ -223,6 +224,8 @@ static bool load_pe_imported_symbols(GPeFormat *format, wgroup_id_t gid, GtkStat content = G_KNOWN_FORMAT(format)->content; + counter = 0; + for (iter = imports; iter->original_first_thunk != 0; iter++) { /* Bibliothèque impactée */ @@ -262,7 +265,7 @@ static bool load_pe_imported_symbols(GPeFormat *format, wgroup_id_t gid, GtkStat if (val64 & 0x8000000000000000) { - routine = g_pe_imported_routine_new(NULL); + routine = g_pe_imported_routine_new(NULL, counter++); g_pe_exported_routine_set_ordinal(G_PE_EXPORTED_ROUTINE(routine), val64 & 0xffff); @@ -280,7 +283,7 @@ static bool load_pe_imported_symbols(GPeFormat *format, wgroup_id_t gid, GtkStat hint += 2; //routine = g_binary_format_decode_routine(base, hint); - routine = g_pe_imported_routine_new((char *)hint); + routine = g_pe_imported_routine_new((char *)hint, counter++); } |