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

Nat*_*ith 3 windows dll native

我有一个文件,plugin.dll其导入表链接到foo.dll. 我想创建一个与 相同的新文件plugin-modified.dll,只是它的导入表从. 任何人都可以建议一种以这种方式重写PE文件的工具吗?理想情况下是命令行/脚本化和开源,但我愿意考虑替代方案......plugin-modified.dllplugin.dllfoo.dllbar.dll

(真正的用例是我想替换对foo.dllwith的引用foo-unique-id-934019384.dll,以便能够在避免名称冲突的同时发布plugin.dllfoo.dll一起发布,以防万一其他人也分发了一些其他插件,这些插件链接到它自己的不同版本的foo.dll.

在 Linux 上,这可以使用该patchelf工具完成,而在 OS X 上,可以使用install_name_tool; 我正在寻找 Windows 等价物。

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

Nat*_*ith 6

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

https://github.com/njsmith/machomachomangler