/* Chrysalide - Outil d'analyse de fichiers binaires * pe_def.h - liste des structures et constantes utilisées par le format PE * * Copyright (C) 2010-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 Chrysalide. If not, see . */ #ifndef _PLUGINS_PE_PE_DEF_H #define _PLUGINS_PE_PE_DEF_H #include /** * Références : * * - https://learn.microsoft.com/en-us/windows/win32/debug/pe-format * - https://fr.wikipedia.org/wiki/Portable_Executable#En-tête_MZ_sous_MS-DOS * - https://www.nirsoft.net/kernel_struct/vista/IMAGE_DOS_HEADER.html * */ /* ---------------------------- DESCRIPTION DU FORMAT PE ---------------------------- */ /* En-tête DOS */ typedef struct _image_dos_header_t { uint16_t e_magic; /* Numéro magique */ uint16_t e_cblp; /* Octets de la dernière page */ uint16_t e_cp; /* Pages dans le fichier */ uint16_t e_crlc; /* Relocalisations */ uint16_t e_cparhdr; /* Taille en paragraphes */ uint16_t e_minalloc; /* Nb min de paragraphes requis*/ uint16_t e_maxalloc; /* Nb max de paragraphes requis*/ uint16_t e_ss; /* Valeur (relative) SS init. */ uint16_t e_sp; /* Valeur SP initiale */ uint16_t e_csum; /* Empreinte */ uint16_t e_ip; /* Valeur IP initiale */ uint16_t e_cs; /* Valeur (relative) CS init. */ uint16_t e_lfarlc; /* Position de table de reloc. */ uint16_t e_ovno; /* Nombre d'overlay */ uint16_t e_res[4]; /* Mots réservés */ uint16_t e_oemid; /* Identifiant OEM */ uint16_t e_oeminfo; /* Infos OEM pour e_oemid */ uint16_t e_res2[10]; /* Mots réservés */ uint32_t e_lfanew; /* Décalage de bon en-tête */ } image_dos_header_t; /* Archtectures supportées */ /** * Cf. https://docs.microsoft.com/en-us/windows/win32/sysinfo/image-file-machine-constants */ #define IMAGE_FILE_MACHINE_UNKNOWN 0x0000 /* Unknown */ #define IMAGE_FILE_MACHINE_TARGET_HOST 0x0001 /* Interacts with the host and not a WOW64 guest */ #define IMAGE_FILE_MACHINE_I386 0x014c /* Intel 386 */ #define IMAGE_FILE_MACHINE_R3000 0x0162 /* MIPS little-endian, 0x160 big-endian */ #define IMAGE_FILE_MACHINE_R4000 0x0166 /* MIPS little-endian */ #define IMAGE_FILE_MACHINE_R10000 0x0168 /* MIPS little-endian */ #define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169 /* MIPS little-endian WCE v2 */ #define IMAGE_FILE_MACHINE_ALPHA 0x0184 /* Alpha_AXP */ #define IMAGE_FILE_MACHINE_SH3 0x01a2 /* SH3 little-endian */ #define IMAGE_FILE_MACHINE_SH3DSP 0x01a3 /* SH3DSP */ #define IMAGE_FILE_MACHINE_SH3E 0x01a4 /* SH3E little-endian */ #define IMAGE_FILE_MACHINE_SH4 0x01a6 /* SH4 little-endian */ #define IMAGE_FILE_MACHINE_SH5 0x01a8 /* SH5 */ #define IMAGE_FILE_MACHINE_ARM 0x01c0 /* ARM Little-Endian */ #define IMAGE_FILE_MACHINE_THUMB 0x01c2 /* ARM Thumb/Thumb-2 Little-Endian */ #define IMAGE_FILE_MACHINE_ARMNT 0x01c4 /* ARM Thumb-2 Little-Endian */ #define IMAGE_FILE_MACHINE_AM33 0x01d3 /* TAM33BD */ #define IMAGE_FILE_MACHINE_POWERPC 0x01f0 /* IBM PowerPC Little-Endian */ #define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1 /* POWERPCFP */ #define IMAGE_FILE_MACHINE_IA64 0x0200 /* Intel 64 */ #define IMAGE_FILE_MACHINE_MIPS16 0x0266 /* MIPS */ #define IMAGE_FILE_MACHINE_ALPHA64 0x0284 /* ALPHA64 */ /*#define IMAGE_FILE_MACHINE_AXP64 0x0284*/ /* AXP64 */ #define IMAGE_FILE_MACHINE_MIPSFPU 0x0366 /* MIPS */ #define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466 /* MIPS */ #define IMAGE_FILE_MACHINE_TRICORE 0x0520 /*Infineon */ #define IMAGE_FILE_MACHINE_CEF 0x0cef /* CEF */ #define IMAGE_FILE_MACHINE_EBC 0x0ebc /* EFI Byte Code */ #define IMAGE_FILE_MACHINE_AMD64 0x8664 /* AMD64 (K8) */ #define IMAGE_FILE_MACHINE_M32R 0x9041 /* M32R little-endian */ #define IMAGE_FILE_MACHINE_ARM64 0xaa64 /* ARM64 Little-Endian */ #define IMAGE_FILE_MACHINE_CEE 0xc0ee /* CEE */ /* Caractéristiques de l'image */ #define IMAGE_FILE_RELOCS_STRIPPED 0x0001 /* Pas de relocalisation */ #define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002 /* Fichier exécutable */ #define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004 /* Pas de ligne COFF */ #define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008 /* Pas de table de symboles COFF */ #define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010 /* Aggressively trim the working set. This value is obsolete as of Windows 2000. */ #define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020 /* Adressage > 2 Go */ #define IMAGE_FILE_BYTES_REVERSED_LO 0x0080 /* Octets inv. ; obsolète */ #define IMAGE_FILE_32BIT_MACHINE 0x0100 /* Machine 32 bits */ #define IMAGE_FILE_DEBUG_STRIPPED 0x0200 /* Pas d'infos de débogage */ #define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400 /* ...support amovible */ #define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800 /* Ficher issu du réseau */ #define IMAGE_FILE_SYSTEM 0x1000 /* Fichier système */ #define IMAGE_FILE_DLL 0x2000 /* Fichier DLL */ #define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000 /* Mono-proc. seulement */ #define IMAGE_FILE_BYTES_REVERSED_HI 0x8000 /* Octets inv. ; obsolète */ /* Première en-tête du "vrai" format */ typedef struct _image_file_header_t { uint16_t machine; /* Type de machine visée */ uint16_t number_of_sections; /* Nombre de sections */ uint32_t time_date_stamp; /* Date de la liaison */ uint32_t pointer_to_symbol_table; /* Position de ladite table */ uint32_t number_of_symbols; /* Nombre de symboles */ uint16_t size_of_optional_header; /* Taille de l'en-tête n°2 */ uint16_t characteristics; /* Propriétés de l'image */ } image_file_header_t; /* -------------------------- EN-TETE EVOLUEE DU FORMAT PE -------------------------- */ /** * Références : * * - http://msdn.microsoft.com/en-us/library/ms680305(VS.85).aspx * - https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-image_optional_header32 */ /* Zone de données Windows */ typedef struct _image_data_directory_t { uint32_t virtual_address; /* Adresse de la table */ uint32_t size; /* Taille de la table */ } image_data_directory_t; // Directory Entries #define IMAGE_DIRECTORY_ENTRY_EXPORT 0 // Export Directory #define IMAGE_DIRECTORY_ENTRY_IMPORT 1 // Import Directory #define IMAGE_DIRECTORY_ENTRY_RESOURCE 2 // Resource Directory #define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3 // Exception Directory #define IMAGE_DIRECTORY_ENTRY_SECURITY 4 // Security Directory #define IMAGE_DIRECTORY_ENTRY_BASERELOC 5 // Base Relocation Table #define IMAGE_DIRECTORY_ENTRY_DEBUG 6 // Debug Directory // IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7 // (X86 usage) #define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 7 // Architecture Specific Data #define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 // RVA of GP #define IMAGE_DIRECTORY_ENTRY_TLS 9 // TLS Directory #define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10 // Load Configuration Directory #define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11 // Bound Import Directory in headers #define IMAGE_DIRECTORY_ENTRY_IAT 12 // Import Address Table #define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13 // Delay Load Import Descriptors #define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14 // COM Runtime descriptor /** * cf. http://msdn.microsoft.com/en-us/library/ms680339(VS.85).aspx */ #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16 /* Seconde en-tête, optionnelle */ typedef struct _image_optional_header_32_t { uint16_t magic; /* Type de binaire manipulé */ uint8_t major_linker_version; /* Version majeure du linker */ uint8_t minor_linker_version; /* Version mineure du linker */ uint32_t size_of_code; /* Taille de tout le code */ uint32_t size_of_initialized_data; /* Taille des données init. */ uint32_t size_of_uninitialized_data; /* Taille des données non init.*/ uint32_t address_of_entry_point; /* Point d'entrée pour un exe. */ uint32_t base_of_code; /* Adresse relative du code */ uint32_t base_of_data; /* Adresse relative des données*/ uint32_t image_base; /* Adresse souhaitée en mémoire*/ uint32_t section_alignment; /* Alignement des sections */ uint32_t file_alignment; /* Alignement des données */ uint16_t major_operating_system_version;/* Numéro majeur d'OS requis */ uint16_t minor_operating_system_version;/* Numéro mineur d'OS requis */ uint16_t major_image_version; /* Numéro majeur du binaire */ uint16_t minor_image_version; /* Numéro mineur du binaire */ uint16_t major_subsystem_version; /* Numéro majeur du sous-sys. */ uint16_t minor_subsystem_version; /* Numéro mineur du sous-sys. */ uint32_t win32_version_value; /* Réservé (-> 0) */ uint32_t size_of_image; /* Taille de l'image */ uint32_t size_of_headers; /* Taille de l'en-tête */ uint32_t checksum; /* Somme de contrôle */ uint16_t subsystem; /* Sous-système visé */ uint16_t dll_characteristics; /* Propriétés de la DLL */ uint32_t size_of_stack_reserve; /* Taille de pile reservée */ uint32_t size_of_stack_commit; /* Taille de pile au démarrage */ uint32_t size_of_heap_reserve; /* Taille de tas reservée */ uint32_t size_of_heap_commit; /* Taille de tas au démarrage */ uint32_t loader_flags; /* Champ obslète */ uint32_t number_of_rva_and_sizes; /* Nombre d'entrées suivantes */ image_data_directory_t data_directory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; } image_optional_header_32_t; typedef struct _image_optional_header_64_t { uint16_t magic; /* Type de binaire manipulé */ uint8_t major_linker_version; /* Version majeure du linker */ uint8_t minor_linker_version; /* Version mineure du linker */ uint32_t size_of_code; /* Taille de tout le code */ uint32_t size_of_initialized_data; /* Taille des données init. */ uint32_t size_of_uninitialized_data; /* Taille des données non init.*/ uint32_t address_of_entry_point; /* Point d'entrée pour un exe. */ uint32_t base_of_code; /* Adresse relative du code */ uint64_t image_base; /* Adresse souhaitée en mémoire*/ uint32_t section_alignment; /* Alignement des sections */ uint32_t file_alignment; /* Alignement des données */ uint16_t major_operating_system_version;/* Numéro majeur d'OS requis */ uint16_t minor_operating_system_version;/* Numéro mineur d'OS requis */ uint16_t major_image_version; /* Numéro majeur du binaire */ uint16_t minor_image_version; /* Numéro mineur du binaire */ uint16_t major_subsystem_version; /* Numéro majeur du sous-sys. */ uint16_t minor_subsystem_version; /* Numéro mineur du sous-sys. */ uint32_t win32_version_value; /* Réservé (-> 0) */ uint32_t size_of_image; /* Taille de l'image */ uint32_t size_of_headers; /* Taille de l'en-tête */ uint32_t checksum; /* Somme de contrôle */ uint16_t subsystem; /* Sous-système visé */ uint16_t dll_characteristics; /* Propriétés de la DLL */ uint64_t size_of_stack_reserve; /* Taille de pile reservée */ uint64_t size_of_stack_commit; /* Taille de pile au démarrage */ uint64_t size_of_heap_reserve; /* Taille de tas reservée */ uint64_t size_of_heap_commit; /* Taille de tas au démarrage */ uint32_t loader_flags; /* Champ obslète */ uint32_t number_of_rva_and_sizes; /* Nombre d'entrées suivantes */ image_data_directory_t data_directory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; } image_optional_header_64_t; typedef union _image_optional_header_t { image_optional_header_32_t header_32; /* Version 32 bits */ image_optional_header_64_t header_64; /* Version 64 bits */ } image_optional_header_t; /* Valeurs pour le champ 'magic' */ #define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b /* Exécutable 32 bits */ #define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b /* Exécutable 64 bits */ #define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107 /* Image ROM */ /* Sous-système attendu (champ 'subsystem') */ #define IMAGE_SUBSYSTEM_UNKNOWN 0 /* Inconnu */ #define IMAGE_SUBSYSTEM_NATIVE 1 /* Rien de requis */ #define IMAGE_SUBSYSTEM_WINDOWS_GUI 2 /* Windows GUI */ #define IMAGE_SUBSYSTEM_WINDOWS_CUI 3 /* Windows CUI */ #define IMAGE_SUBSYSTEM_OS2_CUI 5 /* OS/2 CUI */ #define IMAGE_SUBSYSTEM_POSIX_CUI 7 /* Posix CUI */ #define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9 /* Windows CE */ #define IMAGE_SUBSYSTEM_EFI_APPLICATION 10 /* Application EFI */ #define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11 /* Pilote EFI + boot */ #define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12 /* Pilote EFI + serv. */ #define IMAGE_SUBSYSTEM_EFI_ROM 13 /* Image ROM EFI */ #define IMAGE_SUBSYSTEM_XBOX 14 /* Xbox */ #define IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION 16 /* Application de boot */ /* Détails pour le champ 'dll_characteristics' */ #define IMAGE_DLLCHARACTERISTICS_UNKNOW_0 0x0001 /* Réservé */ #define IMAGE_DLLCHARACTERISTICS_UNKNOW_1 0x0002 /* Réservé */ #define IMAGE_DLLCHARACTERISTICS_UNKNOW_2 0x0004 /* Réservé */ #define IMAGE_DLLCHARACTERISTICS_UNKNOW_3 0x0008 /* Réservé */ #define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 0x0040/* Reloc. possible */ #define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 0x0080 /* Vérif. forcées */ #define IMAGE_DLLCHARACTERISTICS_NX_COMPAT 0x0100 /* Compatible DEP */ #define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 0x0200/* Pas d'isolation */ #define IMAGE_DLLCHARACTERISTICS_NO_SEH 0x0400 /* Pas de SEH */ #define IMAGE_DLLCHARACTERISTICS_NO_BIND 0x0800 /* Ne pas lier */ #define IMAGE_DLLCHARACTERISTICS_UNKNOW_4 0x1000 /* Réservé */ #define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 0x2000 /* Pilote WDM */ #define IMAGE_DLLCHARACTERISTICS_UNKNOW_5 0x4000 /* Réservé */ #define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000 /* Support */ /* Résumé global */ typedef struct _image_nt_headers_t { uint32_t signature; /* Numéro magique */ image_file_header_t file_header; /* En-tête n°1 */ image_optional_header_t optional_header;/* En-tête n°2 */ } image_nt_headers_t; /* --------------------------- SECTIONS POUR LE FORMAT PE --------------------------- */ /** * cf. http://msdn.microsoft.com/en-us/library/ms680341(VS.85).aspx */ /* Taille maximale d'un nom, avec ou sans '\0' final */ #define IMAGE_SIZEOF_SHORT_NAME 8 /* Description d'une section */ typedef struct _image_section_header_t { char name[IMAGE_SIZEOF_SHORT_NAME]; /* Nom de la section */ union { uint32_t physical_address; /* Adresse physique */ uint32_t virtual_size; /* Taille en mémoire */ }; uint32_t virtual_address; /* Adresse en mémoire */ uint32_t size_of_raw_data; /* Taille de données définies */ uint32_t pointer_to_raw_data; /* Position de ces données */ uint32_t pointer_to_relocations; /* Position des relocalisations*/ uint32_t pointer_to_line_numbers; /* Position de numéros de ligne*/ uint16_t number_of_relocations; /* Quantité de relocalisations */ uint16_t number_of_line_numbers; /* Quantité de numéros de ligne*/ uint32_t characteristics; /* Caractéristiques */ } image_section_header_t; /* Détails des caractéristiques d'une image (champ 'characteristics') */ #define IMAGE_SCN_UNKNOWN_0 0x00000000 /* Réservé */ #define IMAGE_SCN_UNKNOWN_1 0x00000001 /* Réservé */ #define IMAGE_SCN_UNKNOWN_2 0x00000002 /* Réservé */ #define IMAGE_SCN_UNKNOWN_3 0x00000004 /* Réservé */ #define IMAGE_SCN_TYPE_NO_PAD 0x00000008 /* Pas de complément (obs) */ #define IMAGE_SCN_UNKNOWN_4 0x00000010 /* Réservé */ #define IMAGE_SCN_CNT_CODE 0x00000020 /* Code exécutable */ #define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040 /* Données intialisées */ #define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080 /* Données non init. */ #define IMAGE_SCN_LNK_OTHER 0x00000100 /* Réservé */ #define IMAGE_SCN_LNK_INFO 0x00000200 /* Commentaires ou autres */ #define IMAGE_SCN_UNKNOWN_5 0x00000400 /* Réservé */ #define IMAGE_SCN_LNK_REMOVE 0x00000800 /* A ne pas intégrer */ #define IMAGE_SCN_LNK_COMDAT 0x00001000 /* Données COMDAT */ #define IMAGE_SCN_UNKNOWN_6 0x00002000 /* Réservé */ #define IMAGE_SCN_NO_DEFER_SPEC_EXC 0x00004000 /* Reset des exceptions */ #define IMAGE_SCN_GPREL 0x00008000 /* Références globales */ #define IMAGE_SCN_UNKNOWN_7 0x00010000 /* Réservé */ #define IMAGE_SCN_MEM_PURGEABLE 0x00020000 /* Réservé */ #define IMAGE_SCN_MEM_LOCKED 0x00040000 /* Réservé */ #define IMAGE_SCN_MEM_PRELOAD 0x00080000 /* Réservé */ #define IMAGE_SCN_ALIGN_1BYTES 0x00100000 /* Alignement sur 1 octet */ #define IMAGE_SCN_ALIGN_2BYTES 0x00200000 /* Alignement sur 2 octets */ #define IMAGE_SCN_ALIGN_4BYTES 0x00300000 /* Alignement sur 4 octets */ #define IMAGE_SCN_ALIGN_8BYTES 0x00400000 /* Alignement sur 8 octets */ #define IMAGE_SCN_ALIGN_16BYTES 0x00500000 /* Alignement de 16 octets */ #define IMAGE_SCN_ALIGN_32BYTES 0x00600000 /* Alignement de 32 octets */ #define IMAGE_SCN_ALIGN_64BYTES 0x00700000 /* Alignement de 64 octets */ #define IMAGE_SCN_ALIGN_128BYTES 0x00800000 /* Alignement de 128 octets*/ #define IMAGE_SCN_ALIGN_256BYTES 0x00900000 /* Alignement de 256 octets*/ #define IMAGE_SCN_ALIGN_512BYTES 0x00a00000 /* Alignement de 512 octets*/ #define IMAGE_SCN_ALIGN_1024BYTES 0x00b00000 /* Alignement sur 1 ko */ #define IMAGE_SCN_ALIGN_2048BYTES 0x00c00000 /* Alignement sur 2 ko */ #define IMAGE_SCN_ALIGN_4096BYTES 0x00d00000 /* Alignement sur 4 ko */ #define IMAGE_SCN_ALIGN_8192BYTES 0x00e00000 /* Alignement sur 8 ko */ #define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000 /* Trop de Relocalisations */ #define IMAGE_SCN_MEM_DISCARDABLE 0x02000000 /* Section abandonnable */ #define IMAGE_SCN_MEM_NOT_CACHED 0x04000000 /* Section non cachable */ #define IMAGE_SCN_MEM_NOT_PAGED 0x08000000 /* Section non paginable */ #define IMAGE_SCN_MEM_SHARED 0x10000000 /* Section partageable */ #define IMAGE_SCN_MEM_EXECUTE 0x20000000 /* Section exécutable */ #define IMAGE_SCN_MEM_READ 0x40000000 /* Section lisible */ #define IMAGE_SCN_MEM_WRITE 0x80000000 /* Section modifiable */ /* --------------------------- IDENTIFICATION DE SYMBOLES --------------------------- */ /** * https://docs.microsoft.com/en-us/previous-versions/ms809762(v=msdn.10)?redirectedfrom=MSDN#pe-file-exports * https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#the-edata-section-image-only */ /* Répertoire des importations */ typedef struct _image_export_directory_t { uint32_t characteristics; /* Zéro !? */ uint32_t time_date_stamp; /* Date de création du fichier */ uint16_t major_version; /* Numéro majeur de version */ uint16_t minor_version; /* Numéro lineur de version */ uint32_t name; /* RVA du nom de la DLL visée */ uint32_t base; /* Départ des ordinaux listés */ uint32_t number_of_functions; /* Taille de liste de fonctions*/ uint32_t number_of_names; /* Taille de liste de noms */ uint32_t address_of_functions; /* Liste de RVA de fonctions */ uint32_t address_of_names; /* Liste de RVA de noms */ uint32_t address_of_name_ordinals; /* Liste de RVA d'ordinaux */ } image_export_directory_t; /** * http://msdn.microsoft.com/en-us/library/ms809762.aspx * http://sandsprite.com/CodeStuff/Understanding_imports.html * http://olance.developpez.com/articles/windows/pe-iczelion/import-table/ * * https://docs.microsoft.com/en-us/previous-versions/ms809762(v=msdn.10)?redirectedfrom=MSDN#pe-file-imports * https://docs.microsoft.com/en-us/windows/win32/debug/pe-format#the-idata-section */ /* Point de départ de la chaîne des importations */ typedef struct _image_import_descriptor_t { uint32_t original_first_thunk; uint32_t time_date_stamp; uint32_t forwarder_chain; uint32_t module_name; uint32_t first_thunk; } image_import_descriptor_t; #endif /* _PLUGINS_PE_PE_DEF_H */