如何修改我没有源代码的程序的 DLL 引用?

如何修改我没有源代码的程序的 DLL 引用?

因此有一个可执行文件,foo.exe。同一目录中它周围的其他可执行文件依赖于bar.dll版本 2。但foo.exe依赖于bar.dll版本1

假设我将bar.dll版本 1 重命名为bar1.dll。版本 2 仍称为bar.dll

那么我是否可以以某种方式修改foo.exe要加载的二进制文件bar1.dll而不是bar.dll

答案1

如果两个 DLL 版本在入口点名称和参数上兼容,则您不需要修改任何内容。您只需要使用 Windows 的 DLL 加载顺序规则,该规则优先从执行程序所在的文件夹加载 DLL。

然后,您需要将每个应用程序隔离在其自己的文件夹中,在两个文件夹中复制公共文件(如果需要),或者在一个文件夹中仅添加指向另一个文件夹中文件的符号链接(以避免重复)。

每个应用程序的文件夹都应包含其自己的 DLL 版本,并使用正确的名称。

这样,就不会发生冲突,并且您不需要对应用程序的可执行文件进行十六进制编辑。


如果入口点的名称和/或参数不同,则需要编写自己的接口 DLL 并调用它 bar.dll。 旧的 DLL 可以重命名并从新编写的 DLL 中调用。

为了帮助分析两个版本的入口点并比较入口点和参数,请参阅帖子 如何从 DLL 生成导入库(LIB 文件)?

相关内容