Windows 如何修改PE导入表,使其不链接到foo.dll而链接到bar.dll?

Windows 如何修改PE导入表,使其不链接到foo.dll而链接到bar.dll?,windows,dll,native,Windows,Dll,Native,我有一个文件plugin.dll,它的导入表链接到foo.dll中的几个符号。我想创建一个新文件plugin-modified.dll,这样plugin-modified.dll与plugin.dll完全相同,只是它的导入表没有链接到foo.dll中的这些符号,而是从bar.dll导入相同的符号。有人能推荐一个这样重写PE文件的工具吗?理想的命令行/脚本和开源,但我愿意考虑替代方案… (真正的使用案例是,我想用foo-unique-id-934019384.dll替换对foo.dll的引用,以便

我有一个文件
plugin.dll
,它的导入表链接到
foo.dll
中的几个符号。我想创建一个新文件
plugin-modified.dll
,这样
plugin-modified.dll
plugin.dll
完全相同,只是它的导入表没有链接到
foo.dll
中的这些符号,而是从
bar.dll
导入相同的符号。有人能推荐一个这样重写PE文件的工具吗?理想的命令行/脚本和开源,但我愿意考虑替代方案…

(真正的使用案例是,我想用
foo-unique-id-934019384.dll
替换对
foo.dll
的引用,以便能够将
plugin.dll
foo.dll
一起发布,同时避免名称冲突,以防其他人也发布链接到其自己的不同版本的插件。)
foo.dll

在Linux上,这可以通过
patchelf
工具来完成,而在OSX上,这可以通过
install\u name\u工具来完成;我正在寻找一个Windows等效工具


我知道SxS程序集可能能够以不同的方式解决这个问题,但它们有自己的局限性,所以我想在决定之前探索这两种方法。)

好吧,我对错过这个工具感到非常恼火,所以我写了它:-)


听起来很可怕,很危险。您可以使用
LoadLibarary
将其更改为动态加载吗?不,我正在寻找一个通用工具,可以用来捆绑任意插件,而无需进行定制的构建系统和源代码修改。(具体来说,这是在为在Windows上分发Python软件包的用户提供通用工具的背景下进行的——正如我所说,我们已经有了在Linux和OS X上完成这项工作的标准/可靠的方法。这并不是真的那么可怕……PE导入表中只有一个字符串,我们想用另一个字符串替换。)