我正在编写一个应该在 16\32\64 位系统上运行的小实用程序。我的旧实用程序通过将 16 位版本压缩为 32 位并/stub
在 Visual Studio 2008 中应用开关(/STUB -MS-DOS Stub File Name)在 32 位和 16 位上运行。
我正在寻找一种对我的 64 位可执行文件执行相同操作的方法。目标 64 位系统是 Win PE 64 位,它没有安装 WOW64。
可能吗?
我正在编写一个应该在 16\32\64 位系统上运行的小实用程序。我的旧实用程序通过将 16 位版本压缩为 32 位并/stub
在 Visual Studio 2008 中应用开关(/STUB -MS-DOS Stub File Name)在 32 位和 16 位上运行。
我正在寻找一种对我的 64 位可执行文件执行相同操作的方法。目标 64 位系统是 Win PE 64 位,它没有安装 WOW64。
可能吗?
Windows 可执行文件的 DOS 存根使用 MZ 部分,而 32 位和 64 位可执行文件都使用 PE 部分。这允许 DOS 存根存在于任一 Windows 可执行文件中,但在尝试组合 32 位和 64 位可执行文件时会导致冲突。
您应该将 32 位和 64 位实用程序打包到另一个 exe 的资源中,我们称其为 32 位启动器。然后你的启动器应该检测它是从哪个系统启动的,然后从它的资源中提取正确的二进制文件并启动它。
Windows 32 位通过 wowexec.exe 运行 16 位应用程序,Win64 通过 wow64 运行 32 位应用程序。因此,如果没有 wow64,您的程序就不可能在 Windows 上创建通用启动器。(注意:Mac OSX 无论如何都支持单个二进制文件中的多种架构)
我能想到的最好方法是创建一个 MSI 安装程序包并将两个 32/64 exe 放入其中。