有哪些工具可以将32位/ 64位可执行文件打包在一起?

时间:2009-07-23 09:31:22

标签: windows winapi 64-bit packing

我非常喜欢SysInternals实用程序(例如Process Explorer)处理64位兼容性的方式。看起来32位可执行文件中嵌入了64位版本,并在必要时提取它。

我想要一个自动执行此操作的工具 - 即获取32位和64位可执行文件,以某种方式将它们打包在一起,并插入存根代码以根据其运行的平台启动正确的可执行文件。

在我开始推销自己之前,有没有人知道这样的东西已经存在?

5 个答案:

答案 0 :(得分:4)

这似乎已经涵盖在......内部(尽管在细节上相当浅)。

Roll 64-bit and 32-bit versions of an app into the same binary?

答案 1 :(得分:2)

不是一个工具,但将您的可执行文件作为资源嵌入VC ++项目中似乎相当容易,并在检查操作系统环境后运行正确的文件。

使用IsWow64Process函数检测32位或64位,这是一篇很好的文章,包括如何嵌入可执行文件的源代码:http://www.codeproject.com/KB/winsdk/binaryresources.aspx

答案 2 :(得分:2)

虽然这是可能的,但我认为这是一个不好的做法,因为大多数应用程序(例如Process Explorer)在工作目录中提取该文件。如果您想将程序放在“Program Files”文件夹中,则该目录与该目录是只读的。

对我而言,将两个程序分开并将快捷方式设置为x86文件似乎更容易。如果该版本检测到64位,则只需启动x64文件。

如果您有充分的理由将这两者结合起来,那么将其作为资源嵌入似乎是一条正确的道路。

答案 3 :(得分:2)

SysInternals成名的Mark Russinovich描述了他们的方法here。它们将x64图像嵌入到x86图像中。不幸的是,上面的博文并没有真正涉及太多细节,但提到他们的技术是基于发现here的更老的文章。

答案 4 :(得分:0)

Here is a guide编译AutoIT脚本来完成这项工作,尽管您无法控制打包和打包的方式。存根发射器工作。

如果链接消失,我将在此处重现AutoIT脚本:

; Check if we’re on 64-bit OS…
If EnvGet(“PROCESSOR_ARCHITEW6432″)=”” Then
    ; No we’re not – run x86 version…
    FileInstall(“D:\Support\ETrustCheck_x86.exe”,@TempDir & “\ETrustCheck_x86.exe”)
    RunWait(“D:\Support\ETrustCheck_x86.exe”,@TempDir & “\ETrustCheck_x86.exe”)
    FileDelete(@TempDir & “\ETrustCheck_x86.exe”)
Else
    ; Yes we are – run x64 version..
    FileInstall(“D:\Support\ETrustCheck_x64.exe”,@TempDir & “\ETrustCheck_x64.exe”)
    RunWait(“D:\Support\ETrustCheck_x86.exe”,@TempDir & “\ETrustCheck_x64.exe”)
    FileDelete(@TempDir & “\ETrustCheck_x64.exe”)
EndIf

; The END

这个脚本可以由AutoIT脚本编辑器包装到32位启动器中,并将两个可执行文件打包到其中。