Apakah mungkin untuk menjalankan .exe lebih besar dari 4GB?

10

Saya membuat arsip SFX> 4GB (arsip self extracting) di 7-Zip, tanpa peringatan. Ketika penerima mencoba mengekstraknya, ia mendapatkan pita kesalahan ini:

masukkan deskripsi gambar di sini

Saya menemukan itu karena .exelebih besar dari 4GB. Setelah menginstal 7-Zip ia dapat mengekstrak arsip, tetapi saya bertanya-tanya mengapa Windows tidak dapat menjalankan executable seperti itu? Dan apakah mungkin untuk melalui beberapa penggantian?

Louis Waweru
sumber
2
Anda biasanya tidak bisa menggunakan sistem 32-bit
Ramhound
1
Untuk memperluas apa yang dikatakan Ramhound, ada kemungkinan 7-Zip self-extractor menyimpan dirinya dalam RAM yang untuk sistem 32-bit, memiliki ukuran akses maksimum 4 GB. Itu juga akan menjelaskan mengapa 7-Zip dapat mengekstraksi, karena arsip tidak perlu sepenuhnya disimpan dalam memori (walaupun itu akan tergantung pada apakah arsip itu solid atau memiliki pengaturan kompresi lainnya).
Doktoro Reichard
Ya, saya pikir itu masalahnya pada awalnya, tapi dia menggunakan Win64 dengan 16GB RAM. Saya menggunakannya juga dengan 8GB.
Louis Waweru

Jawaban:

10

Windows tidak akan mendukung executable yang berukuran lebih dari 4GB menurut utas ini:

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

Komentator "Igor Pavlov" adalah pencipta dan pemelihara 7-Zip. Sementara komentar itu agak singkat, ada utas lain di forum sourceforge yang mengulangi saran yang sama. Saya tidak percaya menjalankan executable pada OS 64-bit akan membuat perbedaan karena ini mungkin menjadi batasan ukuran file executable windows, yaitu keterbatasan format Windows PE itu sendiri.

Ini artikel tentang Menulis program 64-bit menunjukkan bahwa:

"Gambar" yang dapat dieksekusi (kode / data yang dimuat dalam memori) dari file Win64 dibatasi dalam ukuran hingga 2GB. Ini karena prosesor AMD64 / EM64T menggunakan pengalamatan relatif untuk sebagian besar instruksi, dan alamat relatif disimpan dalam kata sandi. Kata hanya mampu menahan nilai relatif ± 2GB.

Agaknya Igor telah datang dengan cara menggunakan ± 2GB untuk mencapai 4GB.

sahmeepee
sumber
1
Kata sandi yang ditandatangani memiliki kisaran 2.147.483.647. Kata yang tidak ditandatangani memiliki kisaran 4.294.967.295, dan angka itu adalah sumber dari sebagian besar keterbatasan di Windows dan di sistem 32-bit di luarnya.
Hashim
@Hashim benar-benar benar, batasnya adalah 4GiB - 1B = 2^32 - 1 bytes = 4,294,967,295 bytes. Saya dapat memverifikasinya pada Windows 10 64-bit dengan membuat arsip self-extracting dengan WinRAR dalam bentuk file .EXE. Sebuah executable dengan ukuran 4GiBtidak akan diluncurkan, tetapi 4GiB - 1Bberfungsi dengan baik.
Robin Hartmann
0

Memiliki self extracting executable lebih besar dari 4GB berada di sisi yang ekstrim, karena ada batas 4gb pada file yang dapat dieksekusi Windows seperti * .exe, * .dll dll untuk PE32 dan versi 64-bit PE32 + (berlaku untuk 32-bit dan 64 -bit versi).

Kedua, file yang dapat dieksekusi dimuat sepenuhnya ke dalam RAM sebelum dieksekusi dan bahkan jika Anda tidak dibatasi oleh Windows (tetapi Anda), Anda dapat dengan mudah dibatasi oleh perangkat keras, yang merupakan jumlah fisik RAM dalam kasus seperti itu.

Nikola Dimitrijevic
sumber
Seperti yang saya tahu ada cara untuk memberitahu Windows untuk memuat hanya bagian tertentu dari file exe, bukan seluruh file dengan sumber daya. Saya pikir banyak program DOS besar menggunakan trik ini juga karena batas dalam 16-bit x86 terlalu kecil
phuclv