在调试Windows进程时,有时尽早中断是很方便的。

初始调用栈看起来像这样:

    ...
    ntdll.dll!_LdrpCallInitRoutine@16()  + 0x14 bytes
    ntdll.dll!_LdrpRunInitializeRoutines@4()  + 0x205 bytes
>   ntdll.dll!_LdrpInitializeProcess@20()  - 0x96d bytes
    ntdll.dll!__LdrpInitialize@12()  + 0x6269 bytes
    ntdll.dll!_KiUserApcDispatcher@20()  + 0x7 bytes

因此,在其中一个ntdll例程中设置一个断点应该确实会非常早地中断该过程。

但是,在调试器中启动进程之前,我无法弄清楚如何在此处设置断点。在Visual Studio(2005)中可以吗?如何?可以在WinDbg中完成吗?

最佳答案

当进程启动时,我将使用GFlags之类的东西来启动调试器。

这是test.exe的示例gflags设置

这是调试器的输出。注意ntdll!LdrpInitializeProcess的调用栈



或者,您可以在调试器中像Windbg一样打开进程,默认情况下该进程会分解为ntdll!LdrpInitializeProcess

高温超导

10-08 08:35
查看更多