是否可以运行大于4GB的.exe?


10

我在7-Zip中创建了一个大于4GB的SFX存档(自解压存档),没有警告。当收件人尝试提取它时,他得到了以下错误提示:

在此处输入图片说明

我发现这是因为.exe大于4GB。安装7-Zip后,他可以提取存档,但是我想知道Windows为什么不能运行这样的可执行文件?是否可以通过一些替代?


2
您通常不能在32位系统上运行
Ramhound13年

1
为了扩展Ramhound所说的话,7-Zip自解压器可能会将自身存储在RAM中,对于32位系统,RAM的最大访问大小为4 GB。这也将解释为什么7-Zip能够提取的原因,因为档案不需要完全存储在内存中(尽管这取决于档案是固定的还是具有其他压缩设置)。
Doktoro Reichard

是的,我一开始以为是问题所在,但他使用的是Win64和16GB的RAM。我也使用8GB。
Louis Waweru

Answers:


10

Windows将根据此线程不支持大于4GB的可执行文件:

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

评论员“ Igor Pavlov”是7-Zip的创建者和维护者。尽管该评论有些简短,但sourceforge论坛上还有其他主题重复相同的建议。我不认为在64位操作系统上运行可执行文件不会有任何区别,因为这很可能是Windows可执行文件大小的限制,即Windows PE格式本身的限制。

文章写作64位程序提示:

Win64文件的可执行文件“映像”(加载到内存中的代码/数据)的大小限制为2GB。这是因为AMD64 / EM64T处理器对大多数指令使用相对寻址,并且相对地址保留在双字中。dword只能保持±2GB的相对值。

大概Igor提出了使用±2GB达到4GB的方法。


1
有符号双字的范围为2,147,483,647。无符号双字的范围为4,294,967,295,该数字是Windows及其外部32位系统中大多数限制的来源。
Hashim

@Hashim是绝对正确的,限制为4GiB - 1B = 2^32 - 1 bytes = 4,294,967,295 bytes。通过使用WinRAR以.EXE文件的形式创建自解压存档,我能够在Windows 10 64位上进行验证。大小为的可执行文件4GiB不会启动,但4GiB - 1B可以正常工作。
罗宾·哈特曼

0

具有大于4GB的自解压可执行文件是极端,因为PE32和64位版本PE32 +(适用于32位和64位)的Windows可执行文件(例如* .exe,*。dll等)有4GB的限制。位版本)。

其次,可执行文件在执行之前已完全加载到RAM中,即使您不受Windows的限制(但确实如此),也很容易受到硬件的限制,在这种情况下,这是RAM的物理量


据我所知,有一些方法可以告诉Windows仅加载exe文件的特定部分,而不加载整个文件的资源。我认为许多大型DOS程序也使用此技巧,因为16位x86中的限制太小了
phuclv 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.