我已经使用 WinDBG 在一些 Windows 内核函数上设置了断点。当断点被击中时,我可以使用!processor!peb命令查询有关调用用户模式进程的信息。
这些命令是如何实现的?当我的一个 BP 命中时,如何找到相关的内存结构并“手动”追溯到用户模式调用者?
我已经使用 WinDBG 在一些 Windows 内核函数上设置了断点。当断点被击中时,我可以使用!processor!peb命令查询有关调用用户模式进程的信息。
这些命令是如何实现的?当我的一个 BP 命中时,如何找到相关的内存结构并“手动”追溯到用户模式调用者?
当前进程 KPROCESS 偏移量由
IDebugSystemObjects::GetCurrentProcessDataOffset
peb 被返回
IDebugSystemObjects::GetCurrentProcessPeb method
两者都在 dbgeng 中实现
您可以设置特定于进程的断点,以便内核 api 仅在正确的进程上下文中中断
bp /p [eprocess] {kernel api}
查看kb断点时的堆栈使用情况
windbg 带有示例 src 代码,它显示了从非常旧的 wdbgext 扩展到最新的 engextcpp 扩展的各种形式的实现
一个基本的实现是简单直接的调用DebugCreate()来获取一个IDebugClient接口从这个客户端接口查询其他接口并调用方法
要查找展示如何使用 dbgeng 函数的系列文章,请在此处探索 http://www.woodmann.com/forum/entry.php?246-A-Simple-Dbgeng-Based-User-Mode-Debugger