Windebug双机调试环境搭建

     开始进行内核编程/驱动编程的调试工作是非常烦人的,由于程序运行与内核层不受操作系统的管控,所以容易引起主机蓝屏和崩溃是常有的事。这也就使得内核程序的调试成了一大问题,而在资源有限的时候,利用虚拟机进行调试是一个很好的选择,这样一来即使是虚拟机因为调试问题而发生蓝屏或崩溃的问题也不至于殃及主机。

今天在搭建环境过程中还是遇到了不少问题,虽然关于这方面的文章已经很多了,但是有一些细节还是会不小心被忽略,而这往往导致最后环境搭建的失败。在这里就相当于做个总结吧,记录整个环境搭建的过程

一、准备工作

  a、虚拟机

    我自己用的是VMware Workstation 10,当然也可以使用其它的虚拟机,不过这个也挺好用的,可以在网上搜一下就能找到下载资源。

  b、Windbg

    这是一款不错的内核调试软件。注意一定要下完整,刚开始就是因为下了一个不完整的资源导致一直配不成功。关于Windbg的获取可以登录:

    http://msdn.microsoft.com/en-us/windows/hardware/hh852365,网站中详细的说明了Windbg的获取方式,在WinDDK的安装路径7600.16385.1\Debuggers下就是Windbg,所以在安装WinDDK的时候应该选择完整安装,还有大量的例子。。。

  c、操作系统

    我这里用的是windows XP SP3

二、环境搭建

  双机:一台调试机(主机)+一台被调试机(虚拟机)+一个串口线。  注:Windebug安装在调试机上

2.1虚拟机的配置

串口配置:

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

2、注意查看是否已有串口存在,如果有需要移除,否在会导致windebug与虚拟机连接不上!!!这里尤为注意打印会占用串口,如下图所示。

  在此需要将打印机移除,否在将导致windebug无法与虚拟机连接!!!!!

  如果已有串口存在的时候,依旧添加新串口的话就会出现如下图的情况:

  新添加的串口的设备名称为“串行端口2”而不是“串行端口”,是由于串行端口1已经被打印机设备占用,根据这个情况也可以判断是否已有串口存在,自习检查并确定没有串行端口存在以后

可继续下文步骤。

3、添加串口

  如下图在【虚拟机设置】窗口的下方选择【添加】按钮

4、进入【添加硬件向导】,硬件类型选择

  在【硬件类型】框中选择【串行端口】然后点击窗口右下角的【下一步】按钮

5、串行端口类型选择

  在【串行端口】复选框中选择【输出到命名管道】,然后点击对话框右下角的【下一步】按钮

6、指定插槽

  配置如下图所示,其中命名管道的com_1为管道名称,可以作改动,但是在用windebug进行连接的时候也要注意名字的一致!!

我这里保留默认名。两台机器,一台为【该端是服务器】保留默认设置,最后一个下拉框选择【另一端是应用程序】。最后注意吧【启动时连接】的复选框选上。

然后点击【完成】按钮即可完成配置。

7、完成串行端口添加

  如下图所示,可以看到新添加的串行端口,并且占用的串行端口1,名字不再是“串行端口2”

打开虚拟机进行配置:

  打开虚拟机中Windows的系统盘,在文件夹选项中设置为“显示所有文件”,“不隐藏系统保护的文件”,然后可以在系统盘下看到一个boot.ini文件。

如果在C盘下找不到boot.int文件,可通过一下方式解决:

      打开电脑属性——高级——启动与故障恢复——在系统启动栏目下选择手动编辑,就打开boot.ini了。

一般boot.int的内容如下:

[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

其中timeout为等待时间30s,而[operating systems]下的两行中,第一行为启动调试运行选项,第二行为正常启动选项

注:

因为在boot.ini中设置的debug输出端口为com1,所以在虚拟操作系统的设备管理器中设置COM1端口的波特率为115200。其他保持默认设置。至此虚拟机设置完毕,重启时即可使用windebug进行连接。

2.2Windebug配置

  下面是调试机上的windebug的启动参数,使之连接一个管道,并把这个管道当做一个串口来处理。

              

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

windbg.exe -b -k com:pipe,port=\\.\pipe\com_1,resets=0

上面的命令可以在控制台(cmd窗口)转到windebug所在目录下后执行。为了以后使用方便,最好建立一个windbg.exe的快捷方式,创建方法如下:

  右键单击windbg.exe选择【创建快捷方式】——》右键单击创建好的快捷方式图标并选择【属性】——》在属性对话框的【目标】一栏加上空格后添加

  -b -k com:por\\.\pipe\com_1,baud=115200,pipe

  或者

  windbg.exe -b -k com:pipe,port=\\.\pipe\com_1,resets=0

  ——》点击保存即可。

  打开虚拟机,启动到调试模式之后哦,马上在命令行中输入命令或者用快捷方式打开WinDbg,就可以开始调试了。windbg.exe会显示连接上的信息。如下组图:

  图中显示的等待时间为之前在boot.ini中设置的timeout值,而【请选择要启动的操作系统:】菜单下的选项则为设置的[operating systems]下的菜单项。这里选择第一项安回车进入或者等时间到了以后自动进入。

  系统以调试模式启动以后,windbg就会选择连接信息,如上图

2.3 设置Windows内核符号表

  打开Windbg,选择菜单项的“File”->“Symbol File Path”,然后填下:

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

如下图如果我们勾选了Reload,那么相当于输入了.reload命令,这时开始下载:

点击【OK】开始下载。。。如下图

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

注:

  
  (1)以上只有需要的时候才会下载;对于已经下载的以后就直接用这个文件夹里面的符号表了。

  (2)有时候下载不一定总是成功。如果发现符号表并没有下载下来,请多试几次。(虚拟机不用关闭,多试几次)

  (3)实际调试驱动时还要加上自己驱动对应的符号表。(驱动对应的符号表可以在编译路径下的objchk_wxp_x86\i386目录下找到)

  (4)当然也可以把系统的Symbols从微软的网站上一次性打包下载下来再解压到C盘的Symbols文件夹。从http://msdn.microsoft.com/en-us/windows/hardware/gg463028可以下载到系统对应的符号表(注意是和虚拟机对应的系统版本)
  (5)之后关闭Windbg,会提示是否保存,点击是,保存。

  

Windebug双机调试环境搭建的更多相关文章

  1. [内核编程] Windebug双机调试环境搭建

    Windebug双机调试环境搭建    开始进行内核编程/驱动编程的调试工作是非常烦人的,由于程序运行与内核层不受操作系统的管控,所以容易引起主机蓝屏和崩溃是常有的事.这也就使得内核程序的调试成了一大 ...

  2. [01] HEVD 双机调试环境搭建

    [01] HEVD 双机调试环境搭建 span::selection, .CodeMirror-line > span > span::selection { background: #d ...

  3. MacOs/Liunx主机搭建windows平台双机调试环境

    0x00 前言 本文的主要试用对象是Mac OS/Linux用户,对于想调试windows内核相关的一些东西时,需要搭建双机调试环境的一些记录.另外对于本机是windows的用户也完全试用,windo ...

  4. Windows下Lua+Redis 断点调试环境搭建==Linux下类似

    Lua+Redis 断点调试环境搭建 windows环境,使用Redis,写lua脚本头疼的问题之一不能对脚本断点调试,google加上自己的摸索,终于搞定. 1.下载ZeroBraneStudio, ...

  5. Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建

    Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建 由于公司里的Solr调试都是用远程jpda进行的,但是家里只有一台电脑所以不能jpda进行调试,这是因为jpda的端口冲突.所以 ...

  6. 《天书夜读:从汇编语言到windows内核编程》四 windows内核调试环境搭建

    1) 基础篇是讲理论的,先跳过去,看不到代码运行的效果要去记代码是一个痛苦的事情.这里先跳入探索篇.其实今天的确也很痛苦,这作者对驱动开发的编译与调试环境介绍得太模糊了,我是各种尝试,对这个环境的搭建 ...

  7. HI3518E平台ISP调试环境搭建

    海思的SDK提供了ISP调试的相关工具,降低了IPC的ISP调试的难度.初次搭建ISP调试环境,记录一下. SDK版本:Hi3518_MPP_V1.0.A.0 硬件平台:HI3518E_OV9732 ...

  8. arm64 调试环境搭建及 ROP 实战

    前言 比赛的一个 arm 64 位的 pwn 题,通过这个题实践了 arm 64 下的 rop 以及调试环境搭建的方式. 题目文件 https://gitee.com/hac425/blog_data ...

  9. 一步一步 Pwn RouterOS之调试环境搭建&&漏洞分析&&poc

    前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 本文分析 Vault 7 中泄露的 RouterOs 漏洞.漏洞影 ...

随机推荐

  1. HTTP协议是无状态协议,怎么理解?

     Http是一个无状态协议,同一个会话的连续两个请求互相不了解,他们由最新实例化的环境进行解析,除了应用本身可能已经存储在全局对象中的全部信息外,该环境不保存与会话有关的不论什么信息. 自己的理解,在 ...

  2. Linux升级Python提示Tkinter模块找不到解决

    一.安装tkinter 在Linux中python默认是不安装Tkinter模块, [root@li250- ~]# python Python (r266:, Feb , ::) [GCC (Red ...

  3. asp.net传值

    asp.net页面传至几种方法 Response.Redirect (或称 Query String 方式.URL方式) Response.Redirect("WebForm5.aspx&q ...

  4. [Linux命令]查看Linux系统相关命令

    #查看系统内核/操作系统/CPU信息 uname -a #返回:内核名 主机名 Linux内核版本 内核编译日期 操作系统版本 CPU型号 硬件平台 GNU/Linux#查看系统是32位还是64位un ...

  5. CGI PHP安装

    ./configure --with-php-config=/usr/local/php/bin/php-config--with-pdo-mysql=/usr/local/mysql PDO——MY ...

  6. Python网络编程——设备名和IPv4地址

    1.快速查看主机名和对应的IP地址小程序 import socket def print_machine_info(): # 定义print_machine_info()类 host_name = s ...

  7. Linux的起源、特点和版本号

    前言 最近上陈渝老师的<高级操作系统>,需要在ucore实验平台上完成一个麻雀虽小五脏俱全的OS,本着看过一小半<30天自制操作系统>的自信,以为这不过是小case,怎料被虐得 ...

  8. 转:requirejs打包压缩r.js使用示例

    为了应对日益复杂,大规模的JavaScript开发.我们化整为零,化繁为简.将复杂的逻辑划分一个个小单元,各个击破.这时一个项目可能会有几十个甚至上百个JS文件,每个文件为一个模块单元.如果上线时都是 ...

  9. Qt分析:Qt中的两种定时器(可是QObject为什么要提高定时器呢,没必要啊。。。)

    Qt有两种定时器,一种是QObject类的定时器,另一种是QTimer类的定时器.   (1)QObject类的定时器   QObject类提供了一个基本的定时器,通过函数startTimer()来启 ...

  10. SpringBoot接口服务处理Whitelabel Error Page(转)

    To switch it off you can set server.error.whitelabel.enabled=false http://stackoverflow.com/question ...