让 DLL 卸载自身

原文链接:http://www.titilima.cn/show-547-1.html

 

今天的问题是:有没有可能让一个 DLL 自己卸载自己?

这个问题可以分成两个部分:

  1. 卸载一个 DLL。
  2. 卸载 DLL 的代码应该是放在 DLL之中的。

当然,如果不考虑后果的话,这个代码并不难写,如下:

简单说明一下:在 DllMain 初始化的时候保存 DLL 的实例句柄(即模块句柄)供 FreeLibrary 调用,然后开启一个线程,在适当的时机调用 FreeLibrary 销毁 DLL。

但是,如果实际运行起来的话,我们会遇到一个很实际的问题:在 FreeLibrary 之后,该 DLL 的地址空间就不再可用了,但这时 EIP 指针仍然会指向 FreeLibrary 的下面一句,于是程序崩溃。

所幸,Win32 提供了另外的一个 API——FreeLibraryAndExitThread,这个函数能够在销毁 DLL 之后直接调用 ExitThread,这样一来 EIP 指针就不会指向非法的地址了。因此,我们只需要把 FreeLibrary 的一句替换为:


这样就可以了。

实际测试一下,在 DLL 被加载后,July 的模块视图显示了这个被加载的 DLL。

在内存视图中检查模块句柄指向的内容,证明该 DLL 的确被加载了。

FreeLibraryAndExitThread 调用后,再查看该模块句柄指向的内存,该地址已不再可用,销毁成功。

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: vmnetbridge.dll是一种动态链接库文件,它是VMware虚拟机软件的一个组件。它主要的作用是在主机和虚拟机之间完成通信,可以看作是主机网络接口与虚拟机网络接口之间的一个中间件。在主机和虚拟机通过NAT方式通信时,该组件就起到了连接网络的作用。 该组件也需要及时维护,如果它出现问题,就会影响到虚拟机的网络连接。例如,当虚拟机无法访问网络或无法连接主机时,可能是vmnetbridge.dll文件出现了问题。此时,我们可以尝试进行和重装该文件,或者更新VMware软件来修复该问题。 总之,vmnetbridge.dll是VMware虚拟机软件的重要组件,它在虚拟机网络通信过程中扮演着至关重要的角色,需要得到及时的维护和修复。 ### 回答2: vmnetbridge.dll是一种用于VMware软件的动态链接库(DLL),它提供了虚拟网络桥接的支持。VMware是一种虚拟机软件,它允许用户在自己的计算机上运行多个操作系统,而不需要额外的硬件。VMnetbridge.dll是VMware所使用的虚拟网络设施的一部分,它通过在主机机器上的网络适配器和虚拟机之间创建桥接,使虚拟机能够与主机机器和其他虚拟机通信。 该DLL通常存储在VMware安装目录下的bin文件夹中。如果VMnetbridge.dll出现错误或丢失,VMware可能无法正常工作,用户可能无法连接到虚拟机或者虚拟机之间的通信受到影响。在这种情况下,用户可以尝试重新安装VMware软件来解决问题,或者手动修复或重新安装vmnetbridge.dll文件。为了避免出现这些问题,建议用户定期更新VMware软件,以确保其与最新版本的vmnetbridge.dll兼容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值