我在 7-Zip 中创建了一个 >4GB 的 SFX 档案(自解压档案),没有任何警告。当收件人尝试提取它时,他得到了以下错误提示:
我发现这是因为.exe
大于 4GB。安装 7-Zip 后,他能够提取存档,但我想知道为什么 Windows 无法运行这样的可执行文件?是否可以通过某种覆盖来实现?
答案1
根据此线程,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 处理器对大多数指令使用相对寻址,并且相对地址保存在双字中。双字只能保存 ±2GB 的相对值。
据推测 Igor 已经想出了使用 ±2GB 来实现 4GB 的方法。
答案2
自解压可执行文件大于 4GB 是极端情况,因为对于 PE32 和 64 位版本 PE32+(适用于 32 位和 64 位版本),Windows 可执行文件(例如 *.exe、*.dll 等)有 4GB 的限制。
其次,可执行文件在执行之前会完全加载到 RAM 中,即使你不受 Windows 的限制(但你确实受限制),你也可能很容易受到硬件的限制,在这种情况下,硬件就是 RAM 的物理量