如何将64位和32位的可执行文件绑定为一个文件?

8

我的想法是将64位和32位Windows可执行文件绑定到一个应用程序中,以便如果不运行64位版本,则尝试运行32位版本。

我正在研究PE并了解了一些关于MS-DOS实模式Stub的知识,它说明如何调用应用程序(通常是错误消息)。但每次我尝试研究MS-DOS实模式Stub时,似乎只显示错误消息。因此,我的想法是用我的32位应用程序覆盖STUB。

我这个天真的自己认为,当32位操作系统运行64位可执行文件时,它会失败,然后运行存根文件。

有没有办法使我的可执行文件独立于32位/64位?


顺便提一下,MS-DOS存根包含16位指令。 - josh poley
2个回答

9
您无法创建一个包含x86x64代码的单个可执行文件。但是,您可以创建单独的32位和64位应用程序,并将x64应用程序打包到x86应用程序资源中。在程序启动时,您可以使用IsWow64Process检查是否正在运行x64环境,然后如果需要,解压缩您的x64版本并运行它。

3
据我所知,这就是微软自己的SysInternals工具所做的事情。 - Remy Lebeau

3
在MacOS、Linux和DOS(或混合DOS-Windows)中有fat binaries,但没有32位和64位的Windows。
您可以简单地编译程序的不同版本,分别进行分发,然后通过脚本或另一个可执行文件在运行时选择所需的版本
另一种方法是在安装时仅安装所需的版本。这被许多程序如CCleaner所使用。安装程序是一个32位应用程序或像.NET这样的通用程序,因此它可以在任何地方运行。如果检测到64位Windows,则仅安装64位版本,在其他情况下仅安装32位版本。
阅读更多:

谢谢!我很感激你的时间。 - Trevin Corkery

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接