[内核编程] Windebug双机调试环境搭建
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双机调试环境搭建的更多相关文章
- Windebug双机调试环境搭建
Windebug双机调试环境搭建 开始进行内核编程/驱动编程的调试工作是非常烦人的,由于程序运行与内核层不受操作系统的管控,所以容易引起主机蓝屏和崩溃是常有的事.这也就使得内核程序的调试成了一大 ...
- [01] HEVD 双机调试环境搭建
[01] HEVD 双机调试环境搭建 span::selection, .CodeMirror-line > span > span::selection { background: #d ...
- 《天书夜读:从汇编语言到windows内核编程》四 windows内核调试环境搭建
1) 基础篇是讲理论的,先跳过去,看不到代码运行的效果要去记代码是一个痛苦的事情.这里先跳入探索篇.其实今天的确也很痛苦,这作者对驱动开发的编译与调试环境介绍得太模糊了,我是各种尝试,对这个环境的搭建 ...
- MacOs/Liunx主机搭建windows平台双机调试环境
0x00 前言 本文的主要试用对象是Mac OS/Linux用户,对于想调试windows内核相关的一些东西时,需要搭建双机调试环境的一些记录.另外对于本机是windows的用户也完全试用,windo ...
- Windbg双机调试环境配置(Windows7/Windows XP+VirtualBox/VMware+WDK7600)
简介:Windbg双机调试内核.驱动 下载软件: 下载Windbg(GRMWDK_EN_7600_1.ISO) 下载VirtualBox 5.2/VMware 12 一.安装WDK,这里要提一点的是D ...
- i.MX RT600之DSP调试环境搭建篇
恩智浦的i.MX RT600是跨界处理器产品,同样也是i.MX RTxxx系列的开山之作.不同于i.MX RT1xxx系列单片机,i.MX RT600 采用了双核架构,将新一代Cortex-M33内核 ...
- Windows下Lua+Redis 断点调试环境搭建==Linux下类似
Lua+Redis 断点调试环境搭建 windows环境,使用Redis,写lua脚本头疼的问题之一不能对脚本断点调试,google加上自己的摸索,终于搞定. 1.下载ZeroBraneStudio, ...
- Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建
Solr4.8.0源码分析(4)之Eclipse Solr调试环境搭建 由于公司里的Solr调试都是用远程jpda进行的,但是家里只有一台电脑所以不能jpda进行调试,这是因为jpda的端口冲突.所以 ...
- HI3518E平台ISP调试环境搭建
海思的SDK提供了ISP调试的相关工具,降低了IPC的ISP调试的难度.初次搭建ISP调试环境,记录一下. SDK版本:Hi3518_MPP_V1.0.A.0 硬件平台:HI3518E_OV9732 ...
随机推荐
- 29.局部和全局重载new delete
#include <iostream> #include <Windows.h> using namespace std; //全局内存管理,统计释放内存,分配内存 //重载全 ...
- 65.十一级指针实现百万qq号的增删查改以及排序写入
运行结果: 内存使用情况: 写入文件排序好的数据: 创建文件地址以及创建十一级指针 char *path = "QQ.txt"; char *sortpath = "QQ ...
- POJ——T 1006 Biorhythms
http://poj.org/problem?id=1006 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 138219 ...
- [Vue + TS] Create Type-Safe Vue Directives in TypeScript
Directives allow us to apply DOM manipulations as side effects. We’ll show you how you can create yo ...
- 学习笔记(一):offset
很多初学者对于JavaScript中的offset.scroll.client一直弄不明白,虽然网上到处都可以看一张图(图1),但这张图太多太杂,并且由于浏览器差异性,图示也不完全正确. 图一 不知道 ...
- oracle_经常使用分组函数
oracle_经常使用分组函数 ①分组函数 1.max(column):求最大值,对数据类型没有要求,随意数据类型都能够 2.min(column):求最小值,对数据类型没有要求,随意数据类型都 ...
- Qt Creator 源码学习 03:qtcreator.pro
当我们准备好 Qt Creator 的源代码之后,首先进入到它的目录,来看一下它的源代码目录有什么奥秘. 这里一共有 9 个文件夹和 9 个文件.我们来一一看看它们都是干什么用的. .git: 版本控 ...
- 位数(digits)的处理
主要针对:二进制表示法,以及十进制表示法: 1. 获取位数 已知该数 n 采用十进制进行表示 二进制形式的位数:⌊log2n⌋+1 十进制形式的位数:⌊log10n⌋+1 2. 截断(保留前/后 m ...
- 并发控制MsSql
Isolation 阅读目录(Content) 1 并发控制理论 1.1 悲观并发控制 1.2 乐观并发控制 2 隔离级别 2.1 隔离级别说明 2.2 Read Commmitted Snaps ...
- express,中间件(body-parser),req.body获取不到参数(含postman发请求的方法)
问题描述: 最近在做毕设,express 里边的中间件(body-parser)失效,req.body获取不到任何值,req.query能获取到值.一开始加body-parser中间件是有用的,直到昨 ...