È possibile eseguire un file exe superiore a 4 GB?


10

Ho creato un archivio SFX> 4 GB (gli archivi autoestraenti) in 7-Zip, senza preavviso. Quando il destinatario ha tentato di estrarlo, ha ottenuto questa barra degli errori:

inserisci qui la descrizione dell'immagine

Ho scoperto che .exeè più grande di 4 GB. Dopo aver installato 7-Zip è stato in grado di estrarre l'archivio, ma mi chiedo perché Windows non possa eseguire un file eseguibile? Ed è possibile effettuare un override?


2
Normalmente non puoi semplicemente sui sistemi a 32 bit
Ramhound

1
Per espandere ciò che ha detto Ramhound, è possibile che l'estrattore automatico a 7 zip si memorizzi nella RAM che, per i sistemi a 32 bit, ha una dimensione di accesso massima di 4 GB. Spiegherebbe anche perché 7-Zip è stato in grado di estrarre, poiché l'archivio non aveva bisogno di essere completamente archiviato in memoria (anche se ciò dipendeva dal fatto che l'archivio fosse solido o avesse altre impostazioni di compressione).
Doktoro Reichard,

Sì, all'inizio ho pensato che fosse questo il problema, ma sta usando Win64 con 16 GB di RAM. Lo sto usando anche con 8 GB.
Louis Waweru,

Risposte:


10

Windows non supporta file eseguibili di dimensioni superiori a 4 GB in base a questo thread:

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

Il commentatore "Igor Pavlov" è il creatore e il manutentore di 7-Zip. Mentre quel commento è in qualche modo brusco, ci sono altri thread nei forum di sourceforge che ripetono lo stesso consiglio. Non credo che l'esecuzione del file eseguibile su un sistema operativo a 64 bit farebbe alcuna differenza poiché ciò potrebbe essere una limitazione della dimensione di un file eseguibile di Windows, ovvero una limitazione del formato stesso di Windows PE .

Questo articolo sulla scrittura di programmi a 64 bit suggerisce che:

L '"immagine" eseguibile (il codice / i dati caricati in memoria) di un file Win64 ha dimensioni limitate a 2 GB. Questo perché i processori AMD64 / EM64T utilizzano l'indirizzamento relativo per la maggior parte delle istruzioni e l'indirizzo relativo viene mantenuto in una parola. Una dword può contenere solo un valore relativo di ± 2 GB.

Presumibilmente Igor ha escogitato un modo per utilizzare ± 2 GB per raggiungere 4 GB.


1
Una dword firmata ha un intervallo di 2.147.483.647. Una dword senza segno ha un intervallo di 4.294.967.295 e quel numero è la fonte della maggior parte delle limitazioni in Windows e nei sistemi a 32 bit al di fuori di esso.
Hashim,

@Hashim è assolutamente corretto, il limite è 4GiB - 1B = 2^32 - 1 bytes = 4,294,967,295 bytes. Sono stato in grado di verificarlo su Windows 10 a 64 bit creando archivi autoestraenti con WinRAR sotto forma di file .EXE. Un eseguibile con una dimensione 4GiBnon si avvia, ma 4GiB - 1Bfunziona bene.
Robin Hartmann,

0

Avere un eseguibile autoestraente di dimensioni superiori a 4 GB è un aspetto estremo, poiché esiste un limite di 4 GB per i file eseguibili di Windows come * .exe, * .dll ecc. Per PE32 e una versione a 64 bit PE32 + (si applica a 32 bit e 64 versioni -bit).

In secondo luogo, il file eseguibile viene caricato completamente nella RAM prima dell'esecuzione e anche se non sei limitato da Windows (ma lo sei), potresti essere facilmente limitato dall'hardware, che è la quantità fisica di RAM in questo caso


Come so ci sono modi per dire a Windows di caricare solo una sezione specifica del file exe, non l'intero file con risorse. Penso che molti grandi programmi DOS utilizzino anche questo trucco poiché il limite in x86 a 16 bit è troppo piccolo
phuclv,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.