在安装 WinDBG 後, 安装目录内有个档案 kernel_debugging_tutorial.doc

里面讲述如何 Debug 某个 Sample Driver

(C:\WINDDK\3790.1830\src\general\ioctl, 网路上都称它为 SIOCTL)

要实做这个 Kernel Debug, 条件是要双机, 对入门者是一大挑战

(Local Kernel Debug 没办法实做这次的实验)

没关系, 我们可以靠着虚拟机来帮我们完成

首先我们必须下载一些工具, VPC 和 WinXP 的 MODE

先下载 VPC , (Microsoft Virtual PC 2007), 用英文版的, 并把它安装好

http://www.microsoft.com/en-us/download/details.aspx?id=24439

然後下载 Windows XP Mode 繁体中文版

http://download.microsoft.com/do ... owsXPMode_zh-tw.exe

简体是这里  http://www.microsoft.com/zh-cn/download/details.aspx?id=8002  (不过要验证)

下载 WindowsXPMode_zh-tw.exe 完毕後,

用 WinRAR 开启并解压缩出里面的 xpm

将 xpm 档案加上副档名变成 xpm.rar

再把 xpm.rar 里面 VirtualXPVHD 解压缩出来,重新命名成VirtualXP.VHD,

建立虚拟机会用到, 限於页面篇幅, 我将设置的过程贴在下面网址

http://www.m5home.com/bbs/thread-6713-1-1.html

上面的事前工作都准备好後我们要开始进入重要的设定了

一. 首次启动虚拟机後, 会先经过一番 XP的安装, 完毕後

我们先设定 XP虚拟机 的 boot.ini

在 C:\ 底下的 boot.ini 档案, 先将它唯读的档案属性取消

用 notepad 打开 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

请先将这内容备份起来, 储存到另一个文字档, 改天要恢复的时候比较方便

再来将 boot.ini 里面这一行

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

改成

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Kernel Debug" /noguiboot /debug /debugport=COM1 /sos

注意喔, 这是改虚拟机里面的 boot.ini, 不是你真实的机子喔

设定完毕後, 关闭这 XP虚拟机 (不是将整个 Virtual PC 2007 关闭)

回到 Virtual PC Console, 设定 WinXP 虚拟机的 COM1

点选 Named pipe 的 option

并在下方的 TextBox 输入 \\.\pipe\com_debug

设定成如下图:

二. 一般在使用 WinDBG 都是用预设的 workspace (default workspace)

由於我们要进入真正实做的 Kernel Debug, 所以必须改变一下

启动 regedit, 到 [HKEY_CURRENT_USER\Software\Microsoft\Windbg]

先将它备份起来, 在该"机码"按滑鼠右键选 [汇出], 储存成 WinDBG.reg

储存备份完成後, 把 WinDBG 的机码删除 (不是删除刚刚备份的 Registry file WinDBG.reg),

不要怀疑, 就是删除, 不删除到後面会有很多後遗症, 会让你一个头两个大,

(当你要再次 Local Mode 的 Kernel Debug, 你再汇入 WinDBG.reg 就好了)

接下来用 explorer 浏览到 WinDBG 的安装目录下的 Themes

C:\Program Files\Debugging Tools for Windows (x86)\themes

里面有个 standardvs.reg , 执行它, 汇入後会有新设定的 workspace 让我们方便使用

现在你启动 WinDBG 後, 应该会是像下面这张图一样的 workspace

现在 workspace 弄好了

接下来要设定 COM, 到 [File] -> [Kernel Debug] ,

在 COM 页签的 Port 下面的 TextBox 输入 \\.\pipe\com_debug

顺便把 pipe 和 Reconnect 这两个 CheckBox 打勾

设定成如下图

按 [确定] 後, 会出现问你要不要储存 workspace 的对话盒

注意喔, 一定要把里面的 Don't ask again in this WinDBG session

的 CheckBox 打勾, 免得後面一直问同样问题

接下来你会在 Command 视窗看到如下图的提示

这时的 WinDBG 是处於等待连结的状态

现在让我们再次启动 WinXP虚拟机,

假如没有出错的话, 这时 WinDBG 和 WinXP虚拟机 已经在互相通讯了

你也会在 WinDBG 的 Command 视窗看到如下图的提示

完毕 WinXP虚拟机 的登入後, 回到 WinDBG 视窗,

在 WinDBG 视窗上的工具条的 Break 按钮按一下

这时的 Disassembly 视窗应该是停在 nt!DbgBreakPointWithStatus

你现在回到 WinXP虚拟机 的视窗用滑鼠点击任何地方都不回应吧

回到 WinDBG 视窗, 在 WinDBG 上的工具条的 Go 按钮, 按一下

三. 万事俱备, 只欠东风

我们的目标是调试 SIOCTL 这个 Driver

启动 WinXP DDK 的 Checked 的 Command Line 视窗

先进入 ioctl 目录

输入 cd C:\WINDDK\3790.1830\src\general\ioctl

[Enter]後, 再输入 build -ceZ , 没发生错误的话, 如下图

并会生成我们要的两个档案 ioctlapp.exe 和 sioctl.sys

档案的路径分别如下

C:\WINDDK\3790.1830\src\general\ioctl\exe\objchk_wxp_x86\i386\ioctlapp.exe

C:\WINDDK\3790.1830\src\general\ioctl\sys\objchk_wxp_x86\i386\sioctl.sys

假如你没有这些档案在这里下载    SIOCTL.rar (243 KB, 下载次数: 1447)  , 放到 C:\ 底下解压缩

然後用 ISO Image 工具      ISO9660.rar (233.95 KB, 下载次数: 1417)

将这两个档案装进 ISO File 里面, 如下图

[File] -> [Create ISO Image], 就會生成一個 ISO Image File 出來

我把它取名为 sioctl.iso

另外, ISO9660 这个 Source 是一个 VB 写的 ISO Image 工具,

它支持 Drag&Drop, 你有兴趣也可以研究看看, 功能当然比不上 UltraISO

回到主题

生成一个含有档案 ioctlapp.exe 和 sioctl.sys 的 Image File 後,

到 WinXP虚拟机 视窗, 在其上方的工具列

[CD] -> [Capture ISO Image], 浏览到刚刚你生成的 sioctl.iso, 并选择它

这时候 WinXP虚拟机 的光碟机 D: 应该会出现我们要的两个档案

再回到 WinDBG 视窗, 按一下 Break 按钮,

然後在 Command 视窗的命令列输入 bu sioctl!DriverEntry

再输入 bl, 应该会显示

kd> bl
    0 eu             0001 (0001) (sioctl!DriverEntry)

好了之後再按一下 Go 按钮,

再回到 WinXP虚拟机 视窗, 执行在 D: 光碟机的 ioctlapp.exe

假如都正常的话, 这时 WinDBG 视窗里面的右上方视窗应该如下图

而左上方视窗应该如下图

好了, 现在你可以按键盘的 F10 (Step Over) 调试了

至此你应该了解如何利用虚拟机实行 Remote Debug (双机调试)

你也可以用这方法 Debug 自己写的 Driver Code

WinDBG 使用教学(四)相关推荐

  1. VULKAN学习笔记-inter教学四篇

    VULKAN学习笔记-inter教学四篇 --交换链相关函数:实例层 vkCreateWin32SurfaceKHR vkDestroySurfaceKHR vkGetPhysicalDeviceSu ...

  2. 四年级计算机下册word教学设计,小学教学四年级教案下册计算机教案-20210723143637.docx-原创力文档...

    小学教学四年级教案下册计算机教案 小学教学四年级教案下册计算机教案 PAGE 小学教学四年级教案下册计算机教案 武汉光谷第十五小学 教课设计 2016--2017年第二学期 学科:信息技术 年级:四年 ...

  3. 语文阅读教学“四何”问题设计

    转:https://www.fx361.com/page/2019/0916/5548386.shtml "四何"问题是"是何""为何"&q ...

  4. 曲鸟全栈UI自动化教学(四):Selenium工作原理及Webdriver对浏览器的配置和操作

    一.前言 上篇文章我们学习了Selenium页面操作原理及如何高效的进行元素定位 那Selenium的工作原理又是什么?是如何驱动浏览器的呢?这篇文章为你讲解Selenium工作原理及Webdrive ...

  5. 四年级计算机ppt教学,四年级计算机(上册).ppt

    <四年级计算机(上册).ppt>由会员分享,可在线阅读,更多相关<四年级计算机(上册).ppt(6页珍藏版)>请在人人文库网上搜索. 1.四年级计算机(上册,江义小学,W O ...

  6. 计算机辅助教学( ),27075 计算机辅助教学

    高纲1228 江苏省高等教育自学考试大纲 27075计算机辅助教学 江苏技术师范学院编 江苏省高等教育自学考试委员会办公室 一.课程性质及其设置目的与要求 (一)课程性质和特点 <计算机辅助教学 ...

  7. 语音增强 理论与实践 pdf_初中英语语音教学策略研究 (结题报告)

    初中英语语音教学策略研究 [摘要] 语音教学作为外语教学的重要组成部分,受到越来越多的重视.初中基础语音教学也是新课程标准中极为重视的一块.在教学过程中,笔者发现班级学生的语音掌握不理想,因此对班级学 ...

  8. 计算机word教案设计,信息技术教学:WORD教学设计

    第一章信息技术简介 第一节信息与信息社会 一.教学目的与要求: 1.了解什么是信息: 2.了解如何描述信息以及对信息进行获取.传递.处理的各种技术: 3.知道计算机技术和通信技术是两种重要的信息技术: ...

  9. 小甲鱼课后作业_教学常规聚养料,润物无声花更艳 ——记长小教师一日教学常规点滴工作...

    教学常规聚养料,润物无声花更艳 黑发积霜织日夜,粉笔无言写春秋,长洋淀小学教师从早到晚,从春到秋,日复一日,年复一年,兢兢业业,做好教学常规工作.今天就带你走进长小,共赏长小教师成长的风采. 聚集群体 ...

最新文章

  1. ORA-16038的解决(日志无法归档)
  2. VisualStudio 的 Spy++ —— 窗口、消息 的 查看分析利器
  3. 信息学奥赛一本通 1193:吃糖果 | OpenJudge NOI 2.6 1944:吃糖果
  4. C#属性详解及属性与函数间的对比
  5. 用AndroidStudio和vsCode运行ReactNative项目
  6. 游戏软件的测试方法简述
  7. 可对Python运行原理进行可视化分析的工具
  8. web跨域问题解决方案
  9. Anaconda换源及常用命令
  10. asp探针,php探针,jsp探针
  11. linux搭建ddos发包机脚本_分享一个linux下自动封IP防御DDOS的脚本-网络教程与技术 -亦是美网络...
  12. 信息安全-终端安全-Windows安全配置
  13. 一文读懂Elephant Swap的LaaS方案的优势之处
  14. 你的工作表现是否成熟,用这4条检验自己
  15. 关于蓝牙开发,必须注意的广播
  16. Android Vector的第一次尝试
  17. android顶部状态栏动态隐藏和恢复,3种Android隐藏顶部状态栏及标题栏的方法
  18. c语言程序设计振动合成,C语言课程设计-振动波的合成原理
  19. a10 linux 烧写,全志 A10 A20 A31 A13固件配置,打包,烧写指南.pdf
  20. 安全生产工作汇报PPT模板

热门文章

  1. win8计算机刻录功能吗,系统之家详解自带功能刻录Win8.1 32位系统盘
  2. Gnuplot设置线条颜色为黑色
  3. Wap2APP不适配iphoneX【解决方法】
  4. ear包目录_EAR包的组成结构 | 学步园
  5. SupeSite 数据库 用户名不正确
  6. thinkphp6.0 接口频繁限制
  7. 数据结构与算法分析 ——回溯算法之收费公路重建问题
  8. 拓扑排序简介及其应用
  9. SQL中永久的修改表的字段名字
  10. 计算机博士入学考试英语,博士生考试_考博与考研的区别(以计算机考博为例)_沪江英语...