SYS调试(第37课)

sys是驱动文件,相对于应用程序来说,它的调试难度稍微大一点,调试sys需要进行双机调试,而前提就是搭建双机调试的环境。

 

一、双机调试环境搭建

 

1、打开vmware中对应的虚拟机设置界面,如下图:vmware

 

2、查看是否已经有端口存在?如果有的话需要移除,否则windbg与vmware连接不上,比如下图,就需要将打印机移除。windbg与vmware

 

3、添加串口。添加串口

 

4、在硬件类型窗口中选择串行端口,并点击下一步。串行端口

 

5、在串行端口类型窗口下选择输出到命名管道,然后点击下一步。

输出到命名管道

 

6、指定插槽。

配置如下图所示,其中命名管道的com_1为管道名称,可以作改动,但是在用windbg进行连接的时候也要注意名字的一致,我这里保留默认名。两台机器,一台为【该端是服务器】保留默认设置,最后一个下拉框选择【另一端是应用程序】。最后注意吧【启动时连接】的复选框选上。

 

然后,点击【完成】按钮即可完成配置。指定插槽

 

7、完成串行端口添加。完成串行端口添加

 

二、配置虚拟机

打开虚拟机中windows的系统盘,找到boot.ini文件,如果不显示这个文件的话,在文件夹选项中设置为“显示所有文件”,“不隐藏系统保护文件”,然后就可以看到boot.ini文件了。显示所有文件

 

打开boot.ini文件后,原始内容如下:

[boot loader]

timeout=30

default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS

[operating systems]

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=”Microsoft Windows XP Professional” /noexecute=optin /fastdetect

 

将最后一行复制并粘贴在[operating systems]下,然后修改一些参数即可!如下:

[boot loader]

timeout=30

default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS

[operating systems]

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=”XP Debug”  /fastdetect /debug /debugport=com1 /buadrate=115200

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS=”Microsoft Windows XP Professional” /noexecute=optin /fastdetect

 

三、windbg配置

下面设置调试机上的windbg启动参数,使之连接一个管道,并把这个管道当作一个串口来处理,首先建立一个windbg.exe的快捷方式,然后右键快捷方式图标选择属性,在属性对话框的目标一栏加上空格后添加:

windbg.exe -b -k com:pipe,port=\\.\pipe\com_1,baud=115200,pipe

 

然后,点击保存即可。

 

要进行双机调试的话,在虚拟机启动时,选择启动调试程序,当虚拟机启动起来之后,再开启windbg就可以连接到虚拟机中。windbg

 

四、设置windows内核符号表

打开windbg,选择菜单“File”->”Symbol File Path”,然后填写:

srv*c:\Symbols*http://msdl.microsoft.com/download/symbols

 

如下图,如果我们选择了Reload,那么相当于输入了.reload命令,这时开始下载符号。设置windows内核符号表

 

以上方法是设置是WinDbg自动用HTTP协议从微软的网站上下载所需的符号表。下载完后可以在C:\Symbols目录中查看,这个路径也可以指定为其它路径。

 

五、寻找DriverEntry

首先使用命令uf nt!IopLoadDriver查看驱动加载的入口,针对32位程序和64位程序,入口处的代码不一样,32位下的代码如下:

nt!IopLoadDriver+0x663:

805a07c9 ffb570ffffff    push    dword ptr [ebp-90h]

805a07cf 57              push    edi

805a07d0 ff572c          call    dword ptr [edi+2Ch]

805a07d3 3bc3            cmp     eax,ebx

805a07d5 8b8d68ffffff    mov     ecx,dword ptr [ebp-98h]

805a07db 8945ac          mov     dword ptr [ebp-54h],eax

805a07de 8901            mov     dword ptr [ecx],eax

805a07e0 0f8c91200500    jl      nt!IopLoadDriver+0x67c (805f2877)

 

64位下的代码如下:

nt!IopLoadDriver+0x9fe:

fffff800`02cb545e 488bd6          mov     rdx,rsi

fffff800`02cb5461 488bcb          mov     rcx,rbx

fffff800`02cb5464 ff5358          call    qword ptr [rbx+58h]

fffff800`02cb5467 4c8b15da3bdaff  mov     r10,qword ptr [nt!PnpEtwHandle (fffff800`02a59048)]

fffff800`02cb546e 8bf8            mov     edi,eax

fffff800`02cb5470 898424e0000000  mov     dword ptr [rsp+0E0h],eax

fffff800`02cb5477 4c3bd5          cmp     r10,rbp

fffff800`02cb547a 0f848e000000    je      nt!IopLoadDriver+0xaae (fffff800`02cb550e)

 

可以通过搜索上述代码中加红的代码定位到关键点,然后bp下断点,之后输入”g”让虚拟机运行,回到使用软件KmdManager加载驱动,打开KmdManager,界面如下:KmdManager

 

将sys文件拖入上图所示的窗口中,在小方框中打勾(可以在卸载驱动的时候再在下面的打勾),如下图所示:KmdManager

 

然后,点击Reg`nRun加载驱动,会看到断点断在我们设置的地方,然后F11进入就达到了DriverEntry开始调试。

 

注意:

32位的驱动程序要在32位系统下调试,64的驱动程序要在64位系统下调试。

头像
  • ¥ 69.0元
  • 市场价:99.0元
  • ¥ 298.0元
  • 市场价:498.0元
  • ¥ 298.0元
  • 市场价:498.0元
  • ¥ 159.0元
  • 市场价:599.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: