如何使用 WinDbg 隔离程序的内核调用?

How do you isolate a kernel call for a program using WinDbg?

我正在尝试使用 WinDbg 调试在加载特定程序时发生的内核调用。内核模式代码内部发生错误。内核函数是非常常见的调用,每秒在机器上的许多进程 运行 上发生多次。因此,如何隔离内核调用以对其进行调试?例如,如果我在 nt!NtCreateSection 或 ntdll!RtlEnterCriticalSection 上放置一个断点,WinDbg 会中断很多次,以至于我什至无法转到 OS 并启动有问题的程序,因为它会中断对内存中所有其他程序正在使用的这些函数的调用,而不是我正在尝试调试的目标程序。请指定解决此问题的方法,并针对内核调用的特定实例或此问题的其他一些解决方案。

打开你的模块。
一旦你打破你的模块
使用 !process 0 0 找到 eprocess 你的模块。
设置进程特定断点
像 bp /p eprocess 符号。

或者用 0xcc 硬修补模块的入口点,然后从那里开始

您也可以使用 ntsd -d your module

通过重定向来调试它

如果需要,您还可以使用 !gflags + ksl 强制加载符号