我附加到一个简单的程序,新线程按预期在 DbgBreakPoint 中断。我正在使用 x64dbg(32 位)。问题是,当我转到“线程”窗口时,它显示所有线程的 EIP 都在 ntdll 中。如果我单击一个线程并切换到它,它会在反汇编中显示 EIP 在调用 WOW64(系统调用)后在线。如果我在那条线上休息并运行什么都不会发生。
这里发生了什么?如何切换到一个线程并从其 EIP 实际所在的位置继续单步执行?
所有线程都在内核中被阻塞似乎没有意义,因为每次我附加时都会发生这种情况,无论何时。我是否暂停线程都没有区别。另一方面,如果我只是放入一个无限循环然后附加,我就可以按预期获得对无限循环的控制。我想这一定意味着线程实际上正在阻塞。但为什么?
考虑到我不能在转换到 WOW64 之后就断线(也就是说,内核从阻塞调用返回,回到 32 位代码中),我可以做些什么来重新获得对线程的控制?