当我们没有两台物理机时,又想做双机内核调试怎么办?当然是装虚拟机啦!本文总结了使用VMware15.5 + win10 + virtualkd + windbg搭建双机内核调试环境。
VMware版本:15.5 pro。可以到VMware 官网下载地址下载最新版本。我的物理主机系统:Win10 1909。其它版本的Windows也可以 ,VMware15.5最低支持Win7系统。虚拟机系统镜像:win10 1809 x64。其它版本的系统也可以。我们可以在msdn i tell you上面找到各个版本的windows官方镜像。除了系统镜像,还包括其它很多工具的官方镜像,比如vs,office等。windbg版本:10.0.18362.1,其它版本的也可以。windbg包含在windows sdk中。可以到微软官网 SDK 下载地址下载。如果只需要windbg,推荐下载.exe形式的安装包。在安装的时候,可以只勾选Debugging Tools for Windows。下载VMware到本地后,直接双击即可安装,一路点击下一步即可。需要注意以下两点:尽量下载最新版本的VMware,早期版本的VMware在win10 1909上可能有兼容性问题。安装好VMware后,就可以安装系统镜像了。通过文件(F) -> 新建虚拟机(N)即可开始新建虚拟机向导。一般我们通过安装程序光盘映像文件(iso)(M)的形式选择下载好的系统镜像安装,然后一路下一步(N)即可。安装完成后,可以启动了。但是可能遇到一些问题,我做了简单的总结。重启进入BIOS,打开Intel Virutal Technology,按F10保存退出。提示VMware Workstation与Device/Credential Guard不兼容。强烈建议先检查下Hyper-V是否开启,如果开启了,请先关闭Hyper-V。如果关闭Hyper-V后还是出现上图的提示。请参考禁用 Device/Credential Guard 的微软官方文档。点击工具下载链接,下载相应的脚本文件到本地。如果我们的系统不是英文系统,按照提示改变脚本里的*$OSArch = $(gwmi win32_operatingsystem).OSArchitecture为$OSArch = $((gwmi win32_operatingsystem).OSArchitecture).tolower()然后以管理员权限执行DG_Readiness_Tool_v3.6.ps1 -Disable -AutoReboot即可。-AutoReboot表示自动重启系统,根据自己的需要指定。重启后,会有提示是否要真的禁用此特性。按Windows键或者F3键禁用,按Esc跳过。顺利安装完系统过后,我们就可以开始进行双机内核调试了。如果我们希望通过虚拟串口的形式连接,我们在系统设置前,一定要注意:VMware中的打印机会占用默认的串口 1。如果不移除打印机,我们新建的串口会是串口 2(这样,我们在被调试系统中设置的时候,需要设定debugport的值为2)。当然,我们可以移除打印机,然后新建串口,这样新建的串口就是默认的串口 1了。我以保留打印机,使用COM2为例,录制了一份屏幕录像。这里对整个操作过程做一个简要描述:新建串口,因为打印机占用了串口 1,所以我们新建的串口是串口 2。设置pipe参数,我设置的是\\.\pipe\bcn_com,其他参数默认即可。bcdedit /debug on
bcdedit /dbgsettings serial debugport:1 baudrate:115200
重启虚拟机系统,发现连接不上。因为我们新建的串口是串口 2,而我们在虚拟机系统里设置的是串口 1。bcdedit /debug on
bcdedit /dbgsettings serial debugport:2 baudrate:115200
最后,还演示了windbg通过命令行直接连接。命令行如下:windbg.exe -k com:pipe,port=\\.\pipe\bcn_com,reconnect
经常做双机内核调试的小伙伴儿一定对VirtualKD不陌生。可以大大提高双机内核调试的速度,可谓神器。几年前,用VirtualKD搭建双机内核调试环境很简单。没想到这次居然各种连接不上。通过google搜索关键字VMware15 VirtualKD,在VirtualKD github issues和看雪论坛『求助问答』的帖子看到已经有小伙伴儿遇到这个问题了。应该是VirtualKD3.0与VMware15.5不兼容。真是个坏消息,不过也有好消息 —— 已经有大佬解决了这个问题,github上对应的仓库是VirtualKD-Redux。在查找解决方案的过程,发现有人遇到另外一个问题。在虚拟机里执行bcdedit /debug on失败,提示值被保护,如下图:VirutalKD-Redux的使用方法和VirutalKD一样,简要步骤如下:在调试主机端运行vmmon64.exe,点击Debugger Path...选择调试器路径。把target64拷贝到虚拟机中(如果是32位系统,请拷贝target32)。在虚拟机中执行target64目录下的vminstall.exe安装VirtualKD-Redux。重启虚拟机系统,选择新建立的Entry,并且按F8选择禁用强制签名。如果顺利,调试器会自动弹出并连接到被调试系统(因为Start debugger automatically默认是勾选状态)。如果调试器没自动弹出,或者我们意外的关闭了调试器,我们可以通过点击Run Debugger按钮,手动启动调试器。当我们执行一些命令的时候(比如,!thread),需要符号文件的帮助。我们可以通过_NT_SYMBOL_PATH环境变量设置符号路径。如果还没有设置,可以在windbg中执行.symfix path/to/symbol_cache自动设置微软符号服务器为上游符号服务器。当需要符号时,windbg会先到path/to/symbol_cache中查找符号,如果找不到,会继续到微软符号服务器上查找,如果在微软符号服务器上找到了,会缓存到path/to/symbol_cache,然后从path/to/symbol_cache加载符号。温馨提示:symfix命令会删除windbg中现有的符号路径设置。目前,好像需要科学上网才能成功连接微软符号服务器。使用VMware前,最好禁用Hyper-V,禁用Security Boot,开启Intel VT-x。一定要注意,VMware默认带的打印机会占用串口 1,如果不删除打印机就新建串口的话,新建的串口是串口 2。VirtualKD3.0还不支持VMware15.5,我们可以使用VirtualKD-Redux。执行.symfix path/to/symbol_cache使用微软符号服务器。VirtualKD official install tutorial
"VMware Workstation and Device/Credential Guard are not compatible" error in VMware Workstation on Windows 10 host (2146361)
Setting up kernel debugging (VirtualKD)
VMware+Windgb+Win7内核驱动调试
看雪ID:编程难
https://bbs.pediy.com/user-873494.htm
*本文由看雪论坛 编程难 原创,转载请注明来自看雪社区。好书推荐
文章来源: http://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458304354&idx=3&sn=cb14b463a1bc48b962fc2d4180ab9545&chksm=b1818fe886f606fe0505d3a31ee560191b9bc252cfce075097827c55cc0681173118c62df0bc#rd
如有侵权请联系:admin#unsafe.sh