正如你在上面看到的那样,在同一个位置有4个win32线程,如何理解它? 的更新
7C92E4BE mov dword ptr [esp],eax
7C92E4C1 mov dword ptr [esp+4],0
7C92E4C9 mov dword ptr [esp+8],0
7C92E4D1 mov dword ptr [esp+10h],0
7C92E4D9 push esp
7C92E4DA call 7C92E508
7C92E4DF mov eax,dword ptr [esp]
7C92E4E2 mov esp,ebp
7C92E4E4 pop ebp
7C92E4E5 ret
7C92E4E6 lea esp,[esp]
7C92E4ED lea ecx,[ecx]
7C92E4F0 mov edx,esp
7C92E4F2 sysenter
7C92E4F4 ret
答案 0 :(得分:4)
猜测,他们可能正在睡觉WaitForSingleObject
或类似的东西。
答案 1 :(得分:1)
猜测,你有一个某种类型的线程池,所以你有四个线程都执行相同的线程函数。在这种情况下,所有四个都很可能是空闲的,等待他们需要执行的任务。如果是这样的话,所有四个都显示相同的位置是非常明智的。
答案 2 :(得分:1)
您需要忽略Microsoft代码启动的线程。我在你的屏幕截图中猜测mmsys或DirectX。 Microsoft代码非常高兴。
启用Microsoft Symbol Server后,您可以更好地诊断他们的操作。你会在Call Stack窗口中获得不错的名字,通常会让你猜出它们的目的是什么。当然,你永远不会看到他们的代码。
答案 3 :(得分:1)
调试器显示将要执行的下一个ring3处理器指令。在这种情况下,线程调用了sysenter,它对操作系统的内核进行ring0系统调用。在将控制权返回给调用代码之前,此内核系统调用正在等待某些事情发生。一旦发生这种情况,它将调用下一个用户模式指令,在这种情况下是ret。
如果您有4个线程都在同一个位置调用同一个函数来等待系统调用,那么您将有4个线程在Threads窗口中显示相同的地址。在Windows子系统构建的应用程序中经常会看到这种情况,Windows子系统通常有许多线程由Windows API启动,大部分时间都在等待内核事件。