Utworzyłem archiwum SFX> 4 GB (archiwa samorozpakowujące) w 7-Zip, bez ostrzeżenia. Kiedy odbiorca próbował go wyodrębnić, dostał tę wstążkę błędu:
Znalazłem to, ponieważ .exe
jest większy niż 4 GB. Po zainstalowaniu 7-Zip był w stanie rozpakować archiwum, ale zastanawiam się, dlaczego Windows nie może uruchomić takiego pliku wykonywalnego? Czy można to zrobić za pomocą obejścia?
windows
computer-architecture
Louis Waweru
źródło
źródło
Odpowiedzi:
System Windows nie obsługuje plików wykonywalnych większych niż 4 GB zgodnie z tym wątkiem:
http://sourceforge.net/p/sevenzip/discussion/45798/thread/337fc13e/
Komentator „Igor Pawłow” jest twórcą i opiekunem 7-Zip. Chociaż ten komentarz jest nieco ostry, na forach sourceforge są inne wątki, które powtarzają tę samą radę. Nie sądzę, aby uruchomienie pliku wykonywalnego w 64-bitowym systemie operacyjnym miało jakąkolwiek różnicę, ponieważ może to być ograniczenie rozmiaru pliku wykonywalnego systemu Windows , tj. Ograniczenie samego formatu Windows PE .
Ten artykuł na temat pisania programów 64-bitowych sugeruje, że:
Prawdopodobnie Igor wymyślił sposób wykorzystania ± 2 GB, aby osiągnąć 4 GB.
źródło
4GiB - 1B = 2^32 - 1 bytes = 4,294,967,295 bytes
. Udało mi się to zweryfikować w 64-bitowym systemie Windows 10, tworząc samorozpakowujące się archiwa za pomocą WinRAR w postaci plików .EXE. Plik wykonywalny o rozmiarze4GiB
nie uruchamia się, ale4GiB - 1B
działa dobrze.Posiadanie samorozpakowującego się pliku wykonywalnego większego niż 4 GB jest ekstremalne, ponieważ istnieje limit 4 GB na pliki wykonywalne systemu Windows, takie jak * .exe, * .dll itp. Dla PE32 i 64-bitowej wersji PE32 + (dotyczy wersji 32-bitowych i 64 wersje bitowe).
Po drugie, plik wykonywalny jest ładowany całkowicie do pamięci RAM przed wykonaniem i nawet jeśli nie jesteś ograniczony przez system Windows (ale jesteś), możesz łatwo zostać ograniczony przez sprzęt, który w takim przypadku jest fizyczną ilością pamięci RAM
źródło