内核模式中的.call替代方法

时间:2015-05-17 00:56:01

标签: debugging windbg

我发现WinDbg的内核模式不支持.call。但我似乎记得GDB允许call进行内核模式调试。

任何人都可以:

  • 建议如何在内核模式调试中调用WinDbg中的任意函数
  • 解释为什么仅在用户模式下支持.call

1 个答案:

答案 0 :(得分:0)

Raymond Chen介绍了g如何在此实施: Stupid debugger tricks: Calling functions and methods

  

回到过去,如果你想从调试器内部调用一个函数,你必须手工完成:保存寄存器,将参数压入堆栈(如果函数使用fastcall或thiscall,则将其推入寄存器) )按下ntdll!DbgBreakPoint函数的地址,将指令指针移动到要调用的函数的开头,然后点击“g”继续执行。该函数然后运行返回到ntdll!DbgBreakPoint,调试器重新获得控制权,您可以查看结果。然后恢复寄存器(包括原始指令指针)并继续调试。 (那段只是一个简短的回顾;我假设你已经知道了。)

因为ntdll,你需要一个不同的返回地址!DbgBreakPoint是一个用户模式地址。由于他提到使用{{1}},因此您需要在返回地址上设置断点。