将本机 dll 合并到 exe 中

将本机 dll 合并到 exe 中

是否可以将多个本机 dll 合并为一个 exe?

是的,我知道使用 .NET/Mono/Managed dll 可以轻松实现这一点,但我能用原生 dll 做同样的事情吗?我发现韓輯,但看起来它只能打包文件,而不能合并文件。

答案1

动态链接库旨在供外部使用。虽然理论上可以重新打包它们包含的函数,但实际上,您能做的最好的事情就是将所有内容打包到一个自解压档案中,该档案会将可执行文件及其 DLL 解压到一个临时文件夹中,然后运行该可执行文件。

如果您可以掌握源代码,您可能只需对静态库 (.lib) 进行最少的更改即可将其编译为可以与需要 DLL 的程序链接的静态库,而不是将 DLL 作为外部库。

答案2

假设你有一个从 DLL 静态导入的可执行文件,则可以使用嵌入工具使用“-impinj”命令行选项。它可以在解析导入的同时将本机 DLL 文件合并到本机 EXE 文件(具有相同的架构)。

例子:pefrmdllembed.exe -impinj myapp.exe ogg.dll myapp_injected.exe

它可以与大多数 DLL 配合使用。请注意特殊的 NT 加载器功能,例如静态 TLS;在 64 位下不受支持,在 32 位下可能无法产生良好的效果。

相关内容