加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-13 21:01:19 所属栏目:Windows 来源:网络整理
导读:我们有一个在内部生成的DLL,并且我们拥有相关联的stub的静态LIB。 我们还有一个EXE,它使用静态链接到DLL的LIB文件(即不是手动使用LoadLibrary)的简单方法使用这个DLL。 当我们部署EXE时,我们希望DLL文件名由于模糊的原因而被更改(根据客户的要求)。 我们
我们有一个在内部生成的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文件相同的输出。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读