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类。 有什么办法吗
使用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文件相同的输出。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- TrustedInstaller.exe占用Windows Server 2008中的大量内存
- 使用wso2 carbon注册表来存储SOA服务的配置数据
- windows – 用户模式应用程序和内核模式驱动程序之间的双向
- windows-7 – 没有足够的存储空间来处理此命令
- windows-server-2012-r2 – 如何在Windows Server 2012 r2中
- windows-如何在golang中获得屏幕分辨率
- windows-phone-7 – 在WP7芒果中默认情况下列表框是否已虚拟
- windows – 为什么这个错误会影响XE2 IDE工具栏呢?
- windows – 如何通过apt-cyg安装cygwin / X
- win10蓝屏1
- win10下,MySQL5.5.61重置密码
- active-directory – Active Directory的当前状态
- Windows – 在服务器2008 R2上关闭没有足够的时间
- windows – 如何设置NTP客户端与NTP服务器同步的
- Windows下mysql5.6升级到5.7的方法(亲测有效哦!
- Windows 7 QueryPerformanceFrequency返回2.4 MH
- .net – 没有足够的存储空间来完成此操作 – 程序
- diskmanagement – Windows 2012 R2中的磁盘管理
- Windows尝试使用asadmin启动GlassFish时,“系统找
- 在没有Microsoft.NET.Sdk.Web的情况下使用Razor