HackerDaGreat57 Asked: 2022-08-09 10:58:44 +0800 CST2022-08-09 10:58:44 +0800 CST 2022-08-09 10:58:44 +0800 CST 如何修改我没有源代码的程序的 DLL 引用? 772 所以有一个可执行文件,foo.exe. 同一目录中围绕它的其他可执行文件取决于bar.dll版本 2。但foo.exe取决于bar.dll版本1。 假设我将bar.dll版本 1 重命名为bar1.dll. 版本 2 仍称为bar.dll. 那么我是否有可能以某种方式修改二进制文件foo.exe以加载bar1.dll而不是加载bar.dll? windows dll 1 个回答 Voted Best Answer harrymc 2022-08-09T12:13:24+08:002022-08-09T12:13:24+08:00 如果两个 DLL 版本在入口点名称和参数上兼容,则无需修改任何内容。只需使用Windows的DLL加载顺序规则,优先从执行所在文件夹加载DLL。 然后,您需要将每个应用程序隔离在其自己的文件夹中,在两个文件夹中复制公共文件(如果需要),或者可能在一个文件夹中仅添加指向另一个文件夹中文件的符号链接(以避免重复)。 每个应用程序的文件夹应包含其自己的 DLL 版本,并使用正确的名称。 这样,就没有冲突,并且您不需要对应用程序的可执行文件进行十六进制编辑。 如果入口点在名称和/或参数方面不同,则需要编写自己的接口 DLL 并调用它 bar.dll。旧的 DLL 可以重命名并从新编写的 DLL 中调用。 为了帮助分析两个版本的入口点并比较入口点和参数,请参阅 如何从 DLL 生成导入库(LIB 文件)一文?
如果两个 DLL 版本在入口点名称和参数上兼容,则无需修改任何内容。只需使用Windows的DLL加载顺序规则,优先从执行所在文件夹加载DLL。
然后,您需要将每个应用程序隔离在其自己的文件夹中,在两个文件夹中复制公共文件(如果需要),或者可能在一个文件夹中仅添加指向另一个文件夹中文件的符号链接(以避免重复)。
每个应用程序的文件夹应包含其自己的 DLL 版本,并使用正确的名称。
这样,就没有冲突,并且您不需要对应用程序的可执行文件进行十六进制编辑。
如果入口点在名称和/或参数方面不同,则需要编写自己的接口 DLL 并调用它
bar.dll
。旧的 DLL 可以重命名并从新编写的 DLL 中调用。为了帮助分析两个版本的入口点并比较入口点和参数,请参阅 如何从 DLL 生成导入库(LIB 文件)一文?