如何检查dll的引用计数?如何知道dll的加载位置?

ldl*_*ina 12 c++ windows

如您所知,如果对LoadLibrary的调用指定已映射到调用进程的地址空间的DLL模块,则该函数只返回DLL的句柄并递增模块的引用计数.

在某个地方,我需要得到一个dll的引用计数.如何获取dll的引用计数?如何知道dll的加载位置?谢谢.

C J*_*son 5

我用Google搜索,发现这篇文章声称提供了答案.对不起,我无能为力:

  • @C Johnson,你试过了吗?此解决方案依赖于未记录的功能,不能保证在未来版本的 Windows 中工作。 (2认同)
  • 实际上,它们甚至不能保证在_current_版本的Windows中工作:-) (2认同)

Chu*_*dad 5

如果这是非编程方式(感谢C.Johnson提供了这一观点),则WinDBG可能会有所帮助

http://windbg.info/doc/1-common-cmds.html#10_modules

查看!dll及其变体。

!dll-具有负载计数的所有已加载模块

编辑2:

如果您想知道从哪里从进程中加载​​所有DLL,有两种方法:

一种。看命令

“ bu kernel32!LoadLibraryExW”;作为/ mu $ {/ v:MyAlias} poi(@ esp + 4); .if($ spat(\“ $ {MyAlias} \”,\“ MYDLL \”)!= 0){kn; } .else {g}“”

在上述网址中

b。在WinDBG下运行该过程。调试->甚至过滤器,然后选择“加载模块”,然后在“执行”下将其设置为“启用”。在“继续”下,将其设置为“未处理”。

其中之一应该可以帮助您。


Ana*_*tts 0

据了解,此信息无法通过公共 API 获得。你的情况是什么?运行AppVerifier将捕获您使用模块(或任何其他)句柄所犯的任何错误。