能力值:
( LV13,RANK:335 )
|
-
-
2 楼
没有遇见过,确实很奇怪。
可以给一个复现代码吗??
一起研究下。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
理论上DllMain CreateThread就会死锁的...
|
能力值:
( LV13,RANK:335 )
|
-
-
4 楼
没有这种事哈...
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
检查一下你CreateThread函数有没有溢出
|
能力值:
( LV8,RANK:130 )
|
-
-
6 楼
结帖:
原因找到了,创建线程使用的_beginthread,而错就错在,创建完线程后不应该去CloseHandle,CRT内部会自动Close。我去CloseHandle的后果就是这个句柄项被提前标记为闲置,随后其他模块触发到访问ntdll!LdrLoaderLock锁时,在一定几率下,内部的事件对象给Ring3分配的句柄值刚好就是原来给线程的Handle值。而CRT线程结束的时候(_endthread)又去Close这个它认为是自己线程句柄的东东,实际上这个已经变成了LdrLoaderLock的事件对象句柄。阴差阳错CLose错误。再后面释放这把锁的时候,这个句柄已经被关闭了。LdrLoaderLock里面的值天知道现在是哪个内核对象,所以抛各种异常了!
|
|
|