Est-il possible d'exécuter un .exe supérieur à 4 Go?

10

J'ai créé une archive SFX> 4 Go (les archives auto-extractibles) en 7-Zip, sans avertissement. Lorsque le destinataire a tenté de l'extraire, il a obtenu ce ruban d'erreur:

entrez la description de l'image ici

J'ai trouvé que c'est parce que la .exetaille est supérieure à 4 Go. Après avoir installé 7-Zip, il a pu extraire l'archive, mais je me demande pourquoi Windows ne peut pas exécuter un tel exécutable? Et est-il possible via une dérogation?

Louis Waweru
la source
2
Normalement, vous ne pouvez tout simplement pas sur les systèmes 32 bits
Ramhound
1
Pour développer ce que Ramhound a dit, il est possible que l'auto-extracteur 7-Zip se stocke dans la RAM qui, pour les systèmes 32 bits, a une taille d'accès maximale de 4 Go. Cela expliquerait également pourquoi 7-Zip a pu extraire, car l'archive n'avait pas besoin d'être entièrement stockée en mémoire (bien que cela dépende de la solidité de l'archive ou de ses autres paramètres de compression).
Doktoro Reichard
Oui, je pensais que c'était le problème au début, mais il utilise Win64 avec 16 Go de RAM. Je l'utilise aussi avec 8 Go.
Louis Waweru

Réponses:

10

Windows ne prend pas en charge les exécutables d'une taille supérieure à 4 Go selon ce fil:

http://sourceforge.net/p/sevenzip/discussion/45798/thread/337fc13e/

Le commentateur "Igor Pavlov" est le créateur et le mainteneur de 7-Zip. Bien que ce commentaire soit quelque peu bref, il existe d' autres discussions sur les forums sourceforge qui répètent le même conseil. Je ne pense pas que l'exécution de l'exécutable sur un système d'exploitation 64 bits ferait une différence car cela pourrait bien être une limitation de la taille d'un fichier exécutable Windows, c'est-à-dire une limitation du format Windows PE lui-même.

Cet article sur l'écriture de programmes 64 bits suggère que:

L '"image" exécutable (le code / les données chargés en mémoire) d'un fichier Win64 est limitée en taille à 2 Go. En effet, les processeurs AMD64 / EM64T utilisent l'adressage relatif pour la plupart des instructions et l'adresse relative est conservée dans un dword. Un dword ne peut contenir qu'une valeur relative de ± 2 Go.

Vraisemblablement, Igor a trouvé un moyen d'utiliser ± 2 Go pour atteindre 4 Go.

sahmeepee
la source
1
Un mot signé a une plage de 2147483647. Un dword non signé a une plage de 4 294 967 295, et ce nombre est la source de la plupart des limitations dans Windows et dans les systèmes 32 bits en dehors de celui-ci.
Hashim
@Hashim est absolument correct, la limite est 4GiB - 1B = 2^32 - 1 bytes = 4,294,967,295 bytes. J'ai pu le vérifier sur Windows 10 64 bits en créant des archives auto-extractibles avec WinRAR sous forme de fichiers .EXE. Un exécutable avec une taille de 4GiBne démarre pas, mais 4GiB - 1Bfonctionne très bien.
Robin Hartmann
0

Avoir un exécutable auto-extractible supérieur à 4 Go est à l'extrême, car il y a une limite de 4 Go sur les fichiers exécutables Windows comme * .exe, * .dll etc. pour PE32 et une version 64 bits PE32 + (s'applique aux 32 bits et 64 versions -bit).

Deuxièmement, le fichier exécutable est chargé complètement dans la RAM avant l'exécution et même si vous n'êtes pas limité par Windows (mais vous l'êtes), vous pourriez être facilement limité par le matériel, qui est la quantité physique de RAM dans un tel cas

Nikola Dimitrijevic
la source
Comme je le sais, il existe des moyens de dire à Windows de ne charger qu'une section spécifique du fichier exe, pas le fichier entier avec des ressources. Je pense que de nombreux grands programmes DOS utilisent également cette astuce car la limite en x86 16 bits est trop petite
phuclv