4GB'den büyük bir .exe çalıştırmak mümkün mü?


10

Ben uyarı olmadan, 7-Zip bir> 4GB SFX arşivi (kendi kendine açılan arşivler) oluşturdum. Alıcı çıkartmaya çalıştığında şu hata şeridini aldı:

resim açıklamasını buraya girin

Ben .exe4GB daha büyük olduğu için buldum . 7-Zip'i yükledikten sonra arşivi çıkarabildi, ancak Windows neden böyle bir yürütülebilir dosyayı çalıştıramayacağını merak ediyorum? Ve bazı geçersiz kılmalarla mümkün mü?


2
Normalde 32 bit sistemlerde
bulunamazsınız

1
Ramhound'un söylediklerini genişletmek için, 7-Zip kendi kendine çıkarıcı, 32 bit sistemler için maksimum erişim boyutu 4 GB olan RAM'de kendini saklayabilir. Ayrıca, arşivin tam olarak bellekte depolanması gerekmediğinden (arşivin sağlam olmasına veya başka sıkıştırma ayarlarına sahip olmasına rağmen) 7-Zip'in neden ayıklayabildiğini açıklayacaktır.
Doktoro Reichard

Evet, ilk başta bunun sorun olduğunu düşündüm, ancak Win64'ü 16GB RAM ile kullanıyor. Ben de 8GB ile kullanıyorum.
Louis Waweru

Yanıtlar:


10

Windows, bu iş parçacığına göre 4 GB'tan büyük yürütülebilir dosyaları desteklemez:

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

"Igor Pavlov" yorumcusu 7-Zip'in yaratıcısı ve koruyucusudur. Bu yorum biraz kısa olsa da , sourceforge forumlarında aynı tavsiyeyi tekrarlayan başka konular da var . Ben 64 bit OS üzerinde çalıştırılabilir çalışan bu gibi herhangi bir fark iyi bir pencere boyutuna yürütülebilir dosya, yani bir sınırlama bir sınırlama olabilir yapacak inanmıyorum Windows PE formatındaki kendisi.

64 bit programlar yazma hakkındaki bu makale şunları önerir:

Bir Win64 dosyasının yürütülebilir "görüntüsü" (belleğe yüklendiği şekliyle kod / veri) boyutu 2 GB ile sınırlıdır. Bunun nedeni, AMD64 / EM64T işlemcilerinin çoğu yönerge için göreli adresleme kullanması ve göreli adresin bir dword'da tutulmasıdır. Bir dword yalnızca ± 2GB göreceli bir değere sahip olabilir.

Muhtemelen Igor, 4GB'a ulaşmak için ± 2GB kullanmanın bir yolunu buldu.


1
İmzalı bir dwordün 2.147.483.647 menzili vardır. İmzasız bir dword 4.294.967.295 aralığındadır ve bu sayı Windows ve dışındaki 32 bit sistemlerde en fazla sınırlamanın kaynağıdır.
Hashim

@Hashim kesinlikle doğru, sınır 4GiB - 1B = 2^32 - 1 bytes = 4,294,967,295 bytes. WinRAR ile .EXE dosyaları biçiminde kendi kendine ayıklanan arşivler oluşturarak Windows 10 64-bit'te doğrulayabildim. Boyutu olan bir yürütülebilir dosya 4GiBbaşlatılamaz, ancak 4GiB - 1Biyi çalışır.
Robin Hartmann

0

Kendi kendine ayıklanan yürütülebilir dosyanın 4GB'den büyük olması aşırı taraftadır, çünkü PE32 için * .exe, * .dll vb. bit sürümleri).

İkincisi, yürütülebilir dosya yürütmeden önce tamamen RAM'e yüklenir ve Windows ile sınırlı olmasanız bile (ancak siz), bu durumda fiziksel RAM miktarı olan donanım ile kolayca sınırlandırılabilirsiniz


Bildiğim gibi, Windows'a exe dosyasının yalnızca belirli bir bölümünü yüklemesini söylemenin yolları var, kaynakları olan tüm dosyayı değil. Ben 16 bit x86 sınırı çok küçük olduğundan birçok büyük DOS program bu hile kullanmak düşünüyorum
phuclv
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.