admin 管理员组文章数量: 887019
环境:
真实机windows10
windows10内安装winDbg
windows10内安装VMware
VMware内安装windows7
步骤:
1.windows内安装windbg,不知道什么原因microsoft store中的windbgpreview安装不上,于是就用了老版本的windbg。
2.vmware添加串口
不知道为什么,创建的串口叫串行端口2,这个数字很重要,要记住,使用命名的管道要\\.\pipe\前缀,后面的名字可以自己写一个短的好记的
3.Windows7内配置调试参数
bcdedit根据default生成一个新的启动项,用来调试,其实通过bcdedit /enum并没有看到default这个名字
bcdedit /copy {default} /d "vmdebug"
已将该项成功复制到 {7985b4ec-581d-11ec-bee9-8214e8b021aa}。
复制一下这个id,粘贴到真实机的文档里面。
此时重启的话会有多一个启动项选择,但是看不到,需要设置timeout,让系统停留在启动项的选择界面
bcdedit /timeout 10
设置timeout会在启动项选择界面停留10秒钟,超过10秒钟则进入默认启动项,
重启后从vmdebug选项进入,设置vmdebug为调试模式,以免影响默认启动方式的系统环境,
bcdedit /dbgsettings serial baudrate:115200 debugport:2
注意这个debugport,就是创建虚拟机串口的端口号,从创建时的截图看,串行端口2,debugport应该就是2,如果不知道。那只能先设置一个,然后连不上的时候再重新输入命令修改串口
bcdedit /debug {ID} ON
ID是从bcdedit /copy创建出vmdebug后生成的id,也可以通过bcdedit /enum查询
重启,停在开机启动项
4.启动windbg
直接启动windbg的话连不上虚拟机,需要添加参数,用命令行启动windbg
windbg.exe -b -k com:pipe,port=\\.\pipe\vmdbg_win7,resets=0
或者新建一个windbg的快捷方式,然后编辑目标,把参数加到目标中去
windbg启动会卡住,等待管道对应的虚拟机中的系统启动
此时vmware启动到启动项选择界面
焦点停留在vmdebug,此时可以直接敲回车进系统,也可以按F8,禁用驱动的数字签名
此时windbg就会连接上
windows7系统也会卡住,按g表示继续执行,系统会继续走开机流程,
如果提示找不到符号,可以在 File->symbol file path中添加url
SRV*c:\mysymbol*http://msdl.microsoft/download/symbols
勾选reload
点击确定
如果有源码的话,可以在File->source file path中添加,便于添加断点
系统走开机流程后windbg进入busy状态,此时不接受命令输入,除非按ctrl+break,或者菜单中debug->break,break之后系统会再次卡住,接受命令行调试
常用命令
lm查看当前加载了哪些模块
系统启动的不同阶段加载的模块不一样,比如此时系统还没加载abc.sys,可以提前设置abc.sys的driverEntry处设置断点
bp+address/符号地址 在address指令处加断点,但是这个地址所在的模块必须已经被加载
bu+address/符号地址 在address指令处加断点,但是这个地址所在的模块可以没有被加载,即延迟加载的模块。
此时应该用bu命令,如果模块加载了就过了DriveEntry
bu abc!DriverEntry
abc驱动加载起来之后就会断点停在DriverEntry,这个时候输入dv命令是没用的,
kd> dv
DriverObject = 0xffff0010`03ecc8d3
RegistryPath = 0xffff0040`00000030
uszDeviceString = struct _UNICODE_STRING "䆰Ȑ婢???"
pDeviceObject = 0xfffff880`00000000
uszDriverString = struct _UNICODE_STRING ""
此时可以(step over)F10往下面运行几行代码
或者(Run to cursor)Ctrl+F10,或者F7
然后执行dv,
比如看到变量DriverObject
再往下执行几行
kd> dv
DriverObject = 0xfffffa80`021041b0
RegistryPath = 0x00000000`00000000
uszDeviceString = struct _UNICODE_STRING "\DosDevices\abc"
pDeviceObject = 0xfffffa80`02106200
uszDriverString = struct _UNICODE_STRING "\Device\abc"
dt DriverObject
查看变量的值,如果变量的值看不到,可以往下运行几行
kd> dt DriverObject
Local var @ 0xfffff880009ae5a0 Type _DRIVER_OBJECT*
0xfffffa80`021041b0
+0x000 Type : 0n4
+0x002 Size : 0n336
+0x008 DeviceObject : 0xfffffa80`02106200 _DEVICE_OBJECT
+0x010 Flags : 2
+0x018 DriverStart : 0xfffff880`04468000 Void
+0x020 DriverSize : 0xf000
+0x028 DriverSection : 0xfffffa80`02104b20 Void
+0x030 DriverExtension : 0xfffffa80`02104300 _DRIVER_EXTENSION
+0x038 DriverName : _UNICODE_STRING "\Driver\abc"
+0x048 HardwareDatabase : 0xfffff800`04393558 _UNICODE_STRING "\REGISTRY\MACHINE\HARDWARE\DESCRIPTION\SYSTEM"
+0x050 FastIoDispatch : (null)
+0x058 DriverInit : 0xfffff880`044744f8 long abc!GsDriverEntry+0
+0x060 DriverStartIo : (null)
+0x068 DriverUnload : (null)
+0x070 MajorFunction : [28] 0xfffff800`03eb31d4 long nt!IopInvalidDeviceRequest+0
代码其他函数设置断点方式也是如此,如果要取消断点,需要用bl命令先看看有哪些断点
kd> bl
0 e fffff880`04474008 [f:\xx.c @ 370] 0001 (0001) abc!DriverEntry
1 e fffff880`04474008 [f:\xx.c @ 370] 0001 (0001) abc!DriverEntry
2 e fffff880`0446a5c4 [f:\xx.c @ 1885] 0001 (0001) abc!MyDeviceIoControl
0,1,2表示断点,e表示enable状态,d表示disable状态
假如现在要关闭MyDeviceIocontrol断点,需要执行bd 2
kd> bd 2
kd> bl
0 e fffff880`04474008 [f:\xx.c @ 370] 0001 (0001) abc!DriverEntry
1 e fffff880`04474008 [f:\xx.c @ 370] 0001 (0001) abc!DriverEntry
2 d fffff880`0446a5c4 [f:\xx.c @ 1885] 0001 (0001) abc!MyDeviceIoControl
此时2的状态就变为d了
bc是清除断点,执行bc 2之后就看不到2了
版权声明:本文标题:win10使用winDbg与VMware中的win7进行双机调试 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1715773878h649167.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论