Windows – 如何重命名DLL但仍允许EXE找到它?

前端之家收集整理的这篇文章主要介绍了Windows – 如何重命名DLL但仍允许EXE找到它?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们有一个在内部生成的DLL,并且我们拥有相关联的stub的静态LIB。

我们还有一个EXE,它使用静态链接到DLL的LIB文件(即不是手动使用LoadLibrary)的简单方法使用这个DLL。

当我们部署EXE时,我们希望DLL文件名由于模糊的原因而被更改(根据客户的要求)。

我们如何做到这一点,使我们的EXE仍然自动发现DLL?

我已经尝试重命名DLL和LIB文件(在它们被构建到其正常名称之后),然后将EXE项目设置更改为与重命名的LIB链接。这在运行时失败,因为我猜这个DLL的名字被烧录到LIB文件中,而不是简单地通过链接器来代替“.lib”和“.dll”来猜测。

一般来说,我们不想将这个混淆应用于DLL的所有用途,所以我们希望保留当前的DLL项目输出文件

我希望有一种方法可以编辑DLL的LIB文件,并用其他东西替换DLL文件的硬编码名称。在这种情况下,这可以完全在EXE项目中完成(可能作为预构建步骤)。

更新:我发现延迟加载不起作用,因为我的DLL包含导出的C类。
this article

有什么办法吗

使用LIB工具(包含在visual studio中)可以从def文件生成一个lib文件。因为你的dll源码不包含一个def文件,你必须先创建一个。您可以使用dumpbin来协助您。例如:dumpbin / exports ws2_32.dll

输出中可以看到导出的函数名称。现在创建一个这样的def文件

LIBRARY WS2_32
EXPORTS
    accept      @1
    bind        @2
    closesocket @3
    connect     @4

@number是dumpbin输出中的序数

使用LIB / MACHINE:x86 /def:ws2_32.def来转换lib文件

现在,您可以轻松修改def文件,并在每次重命名dll时生成一个新的libfile。

您可以使用dumpbin来验证libfile:dumpbin / exports ws2_32.lib。你应该得到与原始的lib文件相同的输出

猜你在找的Windows相关文章