我写了一个小程序,它只显示一个对话框。基本上是一个 ASM Hello World。当显示对话框并且我在 WinDBG 中中断时,即使应用程序根本不使用任何线程,我也可以看到三个线程。
我不知道有类似默认线程应用于进程的东西,还是因为 WinDBG?
进程/线程窗口显示
000:13d4:MyApp.exe
000:d14
001:11bc
002:50c
如果我放置了一个内存访问断点并且该进程将有多个线程,我是否必须指定应该在哪个线程中触发它。我觉得这应该没有关系吧?因此,如果任何线程访问地址,则无论如何都应触发断点。
日期
所以我现在仔细看看(句柄号已经改变,但 ID 无论如何都是相关的)。如果有帮助,我正在运行 Windows 7-32bit-x86。
000:
指的是我原来的过程,但这已经是众所周知的了。
001:
我中断时的堆栈跟踪看起来像这样(WinDBG 需要一些线程同步?):
ntdll!KiFastSystemCallRet
kernel32!WaitForMultipleObjectsEx+0x8e
kernel32!WaitForMultipleObjects+0x18
msiltcfg!RestartMsi+0x32e
kernel32!BaseThreadInitThunk+0x12
ntdll!RtlInitializeExceptionChain+0xef
ntdll!RtlInitializeExceptionChain+0xc2
似乎这个线程属于一些msiltcfg.dll
可能是 Windows 7 DLL 的线程,但是为什么它会在我的进程中创建线程?
002:
所以这可能是 Akira32 在他的回答中提到的 WinDBG 线程,对吗?(为什么 WinDBG 需要自己的线程?)。
ntdll!DbgBreakPoint
kernel32!BaseThreadInitThunk+0x12
ntdll!RtlInitializeExceptionChain+0xef
ntdll!RtlInitializeExceptionChain+0xc2