当我们调试用户层程序时,调试器会将线程挂起,此时目标程序处于一种“卡死”的状态。
若目标是操作系统,那么被挂起的将是整个操作系统。Windows为了可以与调试器交互,设计了一个调试子系统
。在调试时,除了调试子系统以外的所有线程全部被挂起,仅剩调试子系统仍可运行。用来与调试器进行信息交互。
信息交互需要通道,操作系统被挂起,声卡网卡等设备无法使用。但可以通过串口
来向外发送数据。
调试器通过串口与调试子系统建立连接来进行信息交互。
WDK_7600.iso:https://cloud.189.cn/t/iE7FZfIBB3Mj (访问码:y20m)
VirtualKD-Redux:https://cloud.189.cn/t/NRJvMnqyYV7v (访问码:1thh)
XP符号包:https://cloud.189.cn/t/3YR3U3QJfIby (访问码:yz0m)
XP纯净镜像:https://cloud.189.cn/t/fm2ymm2eANna (访问码:hgr8)
XP系统激活码:HTXH6-2JJC4-CDB6C-X38B4-C3GF3
这里使用XP作为目标系统来学习内核。因此我安装了一个XP的镜像。推荐安装itellyou上的XP镜像
之前随便找了一个XP镜像,结果符号包解析不了,又重新安装了一个itellyou的镜像。
开机后进入C盘根目录,有一个boot.ini文件,这是个隐藏文件,记得去控制面板里设置显示隐藏
打开ini文件,加入下面这一行:
然后就可以关机了,镜像就配置完了
为镜像添加一个串口
设置为使用命名的管道
、该端是服务器
、另一端是应用程序
,管道命名填写:
然后点击确定。
windbg的安装使用WDK_7600.ISO
来安装WDK,这样就会附带windbg。不要自己装windbg,否则可能出现一些错误。
双击ISO文件,等待DVD驱动器挂载成功后,管理员运行KitSetup.exe
,然后一直下一步。
安装完成后,找到WDK的安装目录(安装的时候会让你选),Debugger目录下就是windbg的组件,将windbg.exe发送到桌面快捷方式。
双击运行windowsxp-kb936929-sp3-x86-symbols-full-enu.exe
,什么都不要改,直接下一步等待安装成功。然后你的C:\Windows
会多出一个Symbols
文件夹,结构如下图,如果不对那就重新安装。这步绝对不能出错。
右键windbg.exe - 快捷方式,点击属性,在目标那里后面加一段话(记得-b前面有个空格别忘记加):
右键此电脑->属性->高级系统设置->环境变量,在Path里新建一条记录,内容为WDK安装路径下的debugger文件夹
在上面的用户变量处新建一个记录,变量名和变量值直接复制下面的,一定不能错,不然后面windbg命令用不了。
都弄完后点击确定,保存退出。
XP开机后选择DEBUG系统,按回车进入。
然后双击windbg - 快捷方式,等待windbg连接串口。
如果出现nt!RtlpBreakWithStatusInstruction:
那就是配置没问题了。如果出现的是BreakWithPoint
那就说明你的符号包配置的有问题。
输入!process 0 0
查看进程,如果可以成功查看,那么双机调试就已经完美配置成功了。如果不可以,那就还是符号包配置有问题。
此处以win7x86演示
WIN7-X86-SP1镜像:https://cloud.189.cn/t/i6beYfrIJnay (访问码:0xyt)
VisualStudio2008(镜像内安装):https://cloud.189.cn/t/2aeyuyEZbuEj (访问码:e34z)
WDK_1803:https://cloud.189.cn/t/MBvmuafYNNze (访问码:kmd0)
VisualStudio2017_1803(实体机安装):https://cloud.189.cn/t/Aj6nieQbaUru (访问码:4ocr)
在XP系统中我们在C盘目录下修改了boot.ini文件即可开启调试模式。但在win7及以后的版本中,windows为我们提供了一个可视化工具来配置引导模式。
以管理员身份运行cmd,可以搜索cmd,然后右键以管理员运行。
在CMD中输入bcdedit /copy {current} /d debug
来添加名为debug的引导模式,回车执行后记下ID。我这里的ID是e7fee4cf-c3b4-11eb-9a3d-82405acb2d2e
,后面的命令要用到这个ID。
执行bcdedit /displayorder {e7fee4cf-c3b4-11eb-9a3d-82405acb2d2e} /addlast
让新加的模式显示出来。
执行bcdedit /dbgsettings SERIAL DEBUGPORT:1 BAUDRATE:115200
设置调试端口及波特率。
执行bcdedit /bootdebug {e7fee4cf-c3b4-11eb-9a3d-82405acb2d2e} ON
启用该模式
执行bcdedit /debug {e7fee4cf-c3b4-11eb-9a3d-82405acb2d2e} ON
启用该模式
执行bcdedit /timeout 30
设置选择引导模式时的超时时间。写30就够了。
重启虚拟机镜像,一定要点虚拟机内的重启,否则设置不会被更新,
添加成功后在开机时会看到多出来的debug选项
如图添加一个串行端口,如果有的话就不用填加了。
点击新添加的串行端口,设置一下管道名//./pipe/com_1
,点击确定保存。
如果你的镜像里面有个打印机,记得删除,否则会占用com1串口。
我们这里使用VS2017专业版+WDK1803。
VS需要安装的组件如下图所示,路径按自己喜好即可。:
WDK安装时建议一路默认。
在WinDbg快捷方式的目标选项中追加-y SRV*C:\symbol*http://msdl.microsoft.com/download/symbols -b -k com:port=//./pipe/com_1,baud=115200,pipe
增加名为_NT_SYMBOL_PATH
的变量,值为SRV*C:\symbol* https://msdl.microsoft.com/download/symbols
选择Debug系统,管理员运行windbg,如下图断下就说明双机调试已经配置成功了。
接下来windbg输入lm
验证符号配置,如下图则说明符号配置成功
输入ld *
可以强制加载所有符号,包括目前暂未使用的符号也会被事先加载。第一次加载时需要从网络上下载符号文件,因此会加载的慢一点,耐心等待全部加载完毕即可。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2021-6-3 14:51
被SSH山水画编辑
,原因: