如何使用Windbg从程序启动前开始调试内核态进程创建流程
调试Windows 7进程创建早期内核流程的实现方法
前置说明
你的双机调试环境已经配置完成,直接对进程创建的内核入口点下断点即可捕获双击启动程序的最早期内核交互流程,无需附加到已运行进程。
具体操作步骤
- 在宿主机Windbg界面按下
Ctrl+Break中断正在运行的虚拟机Windows 7内核。 - 执行断点设置命令,所有用户态启动进程的请求最终都会调用内核导出函数
nt!NtCreateUserProcess,这是进程创建在内核态的最早公共入口点:
如果你需要过滤特定进程的创建请求,可以设置条件断点,例如仅捕获bp nt!NtCreateUserProcessnotepad.exe启动的断点命令如下(适配7601内核的参数偏移):bp nt!NtCreateUserProcess "as /mu ProcessName poi(poi(esp+0x4)+0x3c); .if ($spat(\"ProcessName\", \"*notepad.exe\")) {} .else {gc}" - 断点设置完成后输入
g命令让虚拟机系统恢复运行。 - 回到虚拟机桌面双击目标程序,Windbg会立刻在
nt!NtCreateUserProcess入口处断下,此时进程的用户态模块还未开始加载,你可以完整跟踪后续内核态创建进程、映射PE文件、初始化执行环境的全流程。
可选调试扩展
如果需要跟踪更早的内核处理逻辑,可以按需对以下内核函数下断点:
nt!PspAllocateProcess:进程内核对象分配阶段nt!MmCreateProcessAddressSpace:进程虚拟地址空间初始化阶段nt!NtCreateSection:PE文件镜像段创建阶段
内容的提问来源于stack exchange,提问作者Kyuwan Kim
相关产品推荐
相关产品推荐

