首页
社区
课程
招聘
[求助]windows下Load_Dll_Debug_Event的通知时机有点过早?
发表于: 2007-9-26 00:16 6173

[求助]windows下Load_Dll_Debug_Event的通知时机有点过早?

2007-9-26 00:16
6173
我发现windows XP把LOAD_DLL_DEBUG_EVENT事件传给调试器时,貌似此时被调试进程还没把dll加进自己的虚存空间...

我写了个调试器,在收到load dll事件时立刻调GetModuleNameEx系统API查询dll的名称,但返回错误,GetLstError提示6号错误,invalid handle
同时我用tasklist /M查看被调试进程加载的dll,也没有看到新加载的dll
最后,我在触发load dll事件时用OD看被调试进程,也没有看到新加载的dll

之后,我修改程序,在收到load dll事件后记下HMODULE,在下一调试事件时才查dll名称,此时返回了正确结果。

因此我猜想是不是windows在传递load dll事件的时间有点早...既然这时候dll还没真正加载进虚存,告诉调试器有什么用呢?为什么不等真正加载之后,dllmain之前的时候通知Load_Dll_Debug_Event呢?

不知各位在做软件调试时是否遇到过类似问题或有类似疑问?
谢谢

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 3758
活跃值: (3352)
能力值: ( LV15,RANK:500 )
在线值:
发帖
回帖
粉丝
2
dll初始化不如此就会连锁依赖,
所以不要在dll初始化时候调用除系统dll(kernel32/user32等)的函数
2007-9-26 03:09
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
首先多谢回答。
不过,我查了下,循环依赖的问题好像很多地方都提到了,但是都只是“禁止”,并没说为什么。可否再具体解释下是循环依赖是如何产生的?

另外,我想,假设A.dll的dllmain中调用LoadLibrary(“B.dll"),只要B.dll不直接或间接依赖于A.dll,就不会产生循环依赖。所以应该说“在dllmain中调用Loadlibrary时要确保不产生循环依赖”就好了,没必要因为有可能产生问题就绝对禁止。

回到本贴问题上,似乎就连循环依赖的“可能性”都想不出来了。无论调试器在被调试进程执行dllmain之前、之中、之后得到Debug Event,它都只是在自己的虚存空间做事而以。

因此我想,完全可以在系统loader调用dllmain的前一条指令处通知,或者也可以在dllmain返回后的第一条指令处通知。还是搞不懂为什么windows不这么做呢...?

望赐教。
2007-9-26 18:02
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
哪位能解释下dll初始化时循环依赖的问题,或者提供个资源参考下?
2007-9-28 10:20
0
游客
登录 | 注册 方可回帖
返回
//