Quelle est la taille maximale d’un fichier PE sur Windows 64 bits?

Il me semble que ça va toujours être 4 Go, car il utilise le même type de données (A DWORD)? N’est-ce pas un DWORD pour le SizeOfImage va toujours être 32 bits? Ou est-ce que je me trompe sur cette limitation?

Répondre

4 Go semble en effet être la limite ssortingcte de TOUS les exécutables portables (PE + 32 bits et 64 bits).

Selon la spécification, il s’agit d’une valeur non signée de 32 bits pour une image PE32 + comme une image PE32.

Toutefois, lors de mes tests avec les applications 32 bits et 64 bits (fichiers PE32 / PE32 +) sous Windows 7 SP1 Édition Familiale Premium x64, la taille maximale des fichiers est comprise entre 1,8 et 1,85 Go .

J’ai testé en créant un exécutable C très basique avec Visual Studio (~ 8K pour 32-bit et 9K pour 64-bit) et j’ai ajouté une section de code vide à l’en-tête PE jusqu’à ce que Windows ne le charge plus. la limite. L’examen du processus avec vmmap a montré que la quasi-totalité des premiers 2 Go d’espace d’adressage étaient l’image (y compris les DLL chargées ultérieurement, telles que kernel32.dll). La limite était la même pour moi avec les processus 32 et 64 bits. Le processus 64 bits comportait l’indicateur défini dans la section “En-tête de fichier” de l’en-tête NT, indiquant qu’il pouvait gérer des adresses> 2 Go. Il pourrait également allouer de la mémoire pour les sections non-image au-dessus de la limite de 2 Go.

Il semble que l’image soit requirejse pour tenir dans l’intégralité de l’espace VA inférieur du processus, ce qui signifie que SizeOfImage est traité de manière efficace par un entier de 32 bits signé par le chargeur.

Selon la spécification COFF / PE32 , la taille de l’image pour un fichier PE32 + (64 bits / (PE +) valide est une valeur non signée de 4 octets.