WinDbg+VMware 调试驱动
Windows调试工具入门-6(WinDbg内核调试常用命令2)
WinDbg内核调试常用命令(2)接上一章继续介绍内核调试下的常用命令,这一章主要涉及内存相关、对象相关、驱动设备相关以及蓝屏Dump 相关命令。
介绍每个命令的主要作用,以及常用方式,不会涉及详细的命令参数,目的是能快速上手熟悉内核调试下的常用操作,而不是替代帮助文件。
内存相关内存操作应该是调试最常用的,比如查看内存、修改内存等。
本节介绍内核模式下常用的内存操作命令,大部分是内核模式下特有的命令,诸如db/eb/dt/s等基本内存命令则不会介绍。
!address!address命令显示内存信息,如内存范围、内存权限等。
这条命令在用户模式下也能用,而且显示的信息比较丰富。
!address命令不带参数时,显示所有内存信息。
kd>!address80800000-0026b000Usage KernelSpaceUsageImageImageName ntoskrnl.exe80a6b000-0001f000Usage KernelSpaceUsageImageImageName halacpi.dll......f51d9000-00005000Usage KernelSpaceUsageKernelStackKernelStack81827020:340.7ac......f894f000-00002000Usage KernelSpaceUsageImageImageName swenum.sysf8951000-00256000Usage KernelSpaceUsageNonPagedSystemf8ba8000-07038000Usage KernelSpaceUsageNonPagedPoolExpansionUsage表示内存用途,如内核映像、非分页内存、内核栈、会话空间等。
通过Usage就能大概了解某段内存的使用情况,也为进一步分析内存指明了方向。
!address xxxxxxxx显示指定地址的内存信息。
windows驱动开发和调试环境搭建
Windows驱动开发和环境搭建【文章标题】: Windows驱动开发和调试的环境设置【文章作者】: haikerenwu【使用工具】: VC6.0,VMware6.0.3,Windbg【电脑配置】: 惠普笔记本xp sp3(一)VMWare安装篇VMWare的安装一路Next即可,关于其序列号,百度一下就能找到,虚拟机安装完成之后,需要安装操作系统,我在虚拟机中安装的是windows xp sp2系统。
点击“文件”----“新建”----“虚拟机”进入新建虚拟机的向导,配置虚拟系统参数选择虚拟系统文件的兼容格式(新手推荐选择默认选项)按照默认设置继续点击下一步,选择好您需要的操作系统,此处我选择的是Windows XP Prefessional。
设置虚拟机名称和虚拟操作系统安装路径,我单独空出来一个F 盘,将虚拟机和虚拟操作系统全部装在该盘。
配置网络模式(推荐选择NA T,一般主机不用做任何的设置虚拟机就可以利用主机上网)。
配置虚拟磁盘的容量。
在这里可以直接单击完成,来完成基本操作设置,磁盘默认空间是8GB,用户可以根据自己的实际使用情况来调整大小,也可以自定义分区。
操作完成之后,在“VM”菜单下有个“setting。
”菜单,点击此菜单,在CD-ROM中选择合适的选项,我使用的是Use ISO image 选项,将我的xp sp2操作系统的ISO映像路径设置好,安装操作系统。
点击ok之后,启动虚拟机,即开始安装操作系统,安装过程跟普通装机过程相同。
安装完成之后,启动操作系统,然后在VM菜单下点击“Install VMWare Tools”,把虚拟操作系统的驱动装好。
(二)VMWare设置篇虚拟操作系统安装完成之后,就是设置该系统为Windbg双机调试做准备。
关闭虚拟操作系统,添加一个虚拟串口,因为我的电脑是笔记本,现在的笔记本很少配置串口,所以要虚拟一个串口,这个过程由VMWare完成,图解如下。
WinDBG+VMware双机内核调试环境搭建
WinDBG+VMware双机内核调试环境搭建因为接下来要写个文件过滤驱动,要有个内核调试环境,昨天天搭了一下,比较简单,网上已有详细步骤。
vmware中装个winxp,暂且称为SlaveOS吧。
相应的我们主系统成为MasterOS。
我的步骤如下:1.先在MasterOS上装WinDbg。
在桌面建一个快捷方式,修改程序启动参数。
具体操作为右键WinDBG快捷方式-》属性。
现在的目标内容为(假设):"E:\Program Files\Debugging Tools for Windows (x86)\windbg.exe",在它后边加上-b -k com:pipe,port=\\.\pipe\com_1,resets=0,注意,红字部分加在引号外面。
确定。
2.MasterOS设置结束,接下设置vmware虚拟机。
设置虚拟机需要在SlaveOS关闭的情况下进行。
打开虚拟设置,增加一个“Serial Port",如图1:图13.下一步选择”Output to named piped".如图2:图24.虚拟机配置完毕,接下来启动SlaveOS进行配置。
打开虚拟机c:\boot.ini。
在文件末尾加上:multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional Debug" /fastdetect /debugport=com_1 /baudrate=115200保存后重启。
启动菜单会新增一个debug的菜单。
如图3:图35.在上述界面按下上下箭头键。
回到MasterOS,通过快捷方式打开WinDBG,此时WinDBG会出现如下提示:Microsoft (R) Windows Debugger V ersion 6.11.0001.404 X86Copyright (c) Microsoft Corporation. All rights reserved.Opened \\.\pipe\com_1Waiting to reconnect...回到虚拟机,按下回车,windgb会显示连接信息。
Windows调试工具入门7(WinDbg驱动程序源码调试)
系列前面的几篇文章已经介绍过对符号路径和源码路径的设置。调试自己编写的驱动时,如 果是主控机上编译,在目标机上运行,那么一般都不需要专门设置 路径 WinDbg 就能找到正 确的符号和源文件。如果驱动不是在主控机上编译的,或者编译之后移动了源码或符号文件 就必须要进行设置。在这里我是这样设置 的:
1.准备
Windows 调试工具优于目前的其他内核调试器很重要的一点,就是能够非常方便的对自己编 写的驱动程序进行源码调试。为了能够更好的说明,我们首先需要做一些准备工作,分别编 写一个测试驱动程序和一个应用程序来使用驱动的功能。 驱动程序 首先实现一个最简单的驱动程序,除了 DriverEntry 等框架代码之外,我们添加一个 IRP_MJ_READ 的 Dispatch 例程,当应用程 序调用 ReadFile 时返回一个值递增的字节。另 外,实现两个 DeviceIoControl Code,一个调用 DbgPrint 向调试器显示信息并返回,另一 个访问非法指针造成崩溃。代码片断如下,完整的代码和编译出来的文件可以在附件中获取:
pstIrpStack = IoGetCurrentIrpStackLocation( Irp); pbyUserBuffer = (PUCHAR)Irp->UserBuffer; ulSize = pstIrpStack->Parameters.Read.Length;
if ( ulSize == 1) {
Device Object list: 82138030 kd> !devobj SrcDbgKnlDrv Device object (82138030) is for: SrcDbgKnlDrv \Driver\SrcDbgKnlDrv DriverObject 8219f5f0 Current Irp 00000000 RefCount 0 Type 00000022 Flags 000000c0 Dacl e10361f4 DevExt 00000000 DevObjExt 821380e8 ExtensionFlags (0000000000) Device queue is not busy. 如果我们的设备有附加到某个设备栈上的话,可以用!devstack 扩展命令显示设备栈的信 息。 kd> !devstack 82138030 !DevObj !DrvObj !DevExt ObjectName > 82138030 \Driver\SrcDbgKnlDrv00000000 SrcDbgKnlDrv 这里看到的输出说明 SrcDbgKnlDrv 没有附加到任何设备栈。 通过!devhandles 命令可以查看设备被打开的句柄。目前在这个地方使用的话,由于没有句 柄被打开,还看不到什么有用的信息,在后面进行演示。
怎样在虚拟机中搞驱动
两台电脑调试跟借助VMware调试有所不同,不同之处有以下几个方面。
(1) 需要自己制作一条Null Modem Cable. 请参考以下电路。将两台电脑连接起来。
6,1 4 Data Set Ready and Carrier Detect
6 20 Data Set Ready and Carrier Detect
-y:设置符号文件路径
现在我们假设你的驱动代码放在D:\mydriver目录中;系统级Symbol文件存放在C:\WINDOWS\Symbols目录中,这些Symbol文件是从微软的网站上/download/symbols下载而来,这个网址是不可以用IE直接打开的,WinDbgà Fileà Symbol File Path...界面中选择Reload,WinDbg会自动帮你下载;驱动生成的Symbol文件存放在D:\mydriver\objchk_wxp_x86\i386目录中。
编辑虚拟机中C盘根目录下的boot.ini文件。
在c:\下,可以找到boot.ini,可以用记事本打开它,或者命令行方式
C:\>attrib -s -h -r boot.ini
C:\>notepad boot.ini
我们需要在 guest os 的启动项上加些参数,才能够使用WinDbg调试它。我们可以在现有的行后面直接加参数,不过强烈推荐复制一个新行,在新行的后面加参数。这样在调试启动有问题的时候,我们可以方便的换回原来的启动方式。下面就是我改好的boot.ini。
运行 VMware ,点击 "Edit virtual machine settings"
点击 "Add..." 来运行 VMware 的
WinDebug+虚拟机---调试驱动的配置
WinDebug+虚拟机---调试驱动的配置WinDebug+虚拟机---调试驱动的配置现在一直在做有关Windows驱动开发的工作,驱动开发非常重要的一环是驱动的调试。
对于Windebug结合虚拟机的双机驱动调试,其配置还是小有点麻烦的。
虽然原先自己配置的时候,都成功了,而且也进行了很多的开发和调试。
但某一天再来设置这些东西的时候,却发现出了问题,甚至去网上找的一些资料也没有用。
现在把自己调试驱动时的切身体会写下来,一方面自己以后也可以看看,也给广大初入门的朋友做以参考。
一、调试环境的安装(1)安装虚拟机(VM)及Windows XP系统(2)安装WinDebug二、配置调试环境(1)在WinDebug的快捷方式上添加:-k com:port=\\.\pipe\com_1,baud=115200,pipe。
例如我的主机上Windebug快捷方式设置以后如下:"C:\Program Files\Debugging Toolsfor Windows (x86)\windbg.exe" -k com:port=\\.\pipe\com_1,baud=115200,pipe (2)在虚拟机中,添加一个串行端口点击"Edit virtual machine settings",添加一个Serial Port,选择"Output to named pipe",然后下一步第一框里保持默认的""第二框里选"This end is the server."第三框里选"The other end is an application."选中"Connect at power on"然后点击"Finish然后在新窗口中选中"Yield CPU on poll"。
调试程序Windbg
调试程序WindbgWinDbg是微软开发的免费源码级图形界面调试工具,可以调试Win32应用程序,服务器应用程序调试和Kernel模式驱动调试。
本文介绍Windbg在调试Win32应用程序时的常用命令。
1、Windbg的启动Windbg可以从命令行启动,启动命令格式为:windbg [-a] [-g] [-h] [-i] [-k [platform port speed]] [-l[text]] [-m] [-p id [-e event]] [-s[pipe]] [-v] [-w name] [-y path][-z crashfile] [filename[.ext] [arguments]]在WindowsXP/2000操作系统下,可以直接双击Windbg图标启动。
2、打开应用程序被调试的应用程序在汇编和连接时应加入调试信息。
汇编时使用参数/Zi;连接程序使用参数/debug。
开始调试一个应用程序时,首先选择File菜单下的Open Executable命令,在对话框中选择可执行文件。
出现Command 窗口,点击工具栏按钮后,在Command 窗口中显示一组信息,再次点击按钮后,在Command 窗口后出现Source窗口。
3、显示存储单元显示存储单元的按钮是。
点击该按钮后,出现对话框在Address Expression编辑框中填入要察看的地址信息。
地址信息有两种常用的输入方式:(1)指定内存单元地址例如:在Address Expression 中填入0x0040103f,点击按钮OK后出现指定地址开始的内存单元的内容:其中0x0040103F至0x004010BF是Windbg显示以十六进制表示的单元地址,中间用十六进制表示每个字节,右边用ASClI字符表示每个字节。
(2)通过变量名表示例如:在Address Expression 中填入&b_var1,点击按钮OK后出现b_var1开始的内存单元的内容:其中0x00404000地址是变量b_var1所在的单元。
Windows 内核驱动调试环境搭建及调试步骤
Windows 内核驱动调试环境搭建及调试步骤本文,系09年笔记记录整理,当时只有大概的步骤,最近又搭建环境,顺道比较详细的整理一下,以供自己备查。
较之前的笔记,只是DDK和VMWARE的版本增高了,基本步骤还是大差不差。
注意:如果是初次搭建环境,请大概浏览完全篇后,再参照本文搭建环境。
一、工具描述主机:XP sp3虚拟机:vmware9.0 +XP sp3WinDBGDDK:6.1.6001.18002.081017-1400_wdksp-WDK18002SP_EN_DVD.iso注:主机:hostOS虚拟机:guestOS代码系《windows驱动开发技术详解》二、具体步骤guestOS设置:添加串口:VM->settings->hardware->add选择 serial设置如下图所示:修改guestOS的boot.ini文件在文件最末行添加如下内容:multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional Debug" /fastdetect /debugport=com2 /baudrate=115200 debugport=com2,要根据你虚拟出来的串口号来设置。
本人电脑里设置的是COM2,如上图所示。
注意:1、boot.ini 文件在C:根目录下,修改booti.in文件时,需要设置文件夹选项,详见下图的标注。
2、波特率进入系统(虚拟机),修改串口的波特率为115200,默认建立的时,波特率是9600。
电脑右键->属性->硬件->属性管理,在弹出的框框里找到COM2修改即可。
虚拟机(guestOS)上的配置基本完成。
hostOS配置:安装DDK版本:6.1.6001.18002.081017-1400_wdksp-WDK18002SP_EN_DVD.iso,在微软网站可以下载到。
Windbg调试驱动
be[id] 启用断点,e=Enable,id为断点编号
来个简单的实践过程,步骤如下:
1.编译好你的驱动,假设名为ShowSSDT.sys,并把驱动符号文件ShowSSDT.pdb发送到MySysSymbols文件夹下(之前设定的自己的调试符号文件夹)
键入!thread和Kp,查看当前的线程详细信息和堆栈(或者Alt+6也可以看stack).
!process [PID] 0, 查到当前进程:
ቤተ መጻሕፍቲ ባይዱ
在lm命令列出的信息中,start是模块的起始地址,通过键入"u 驱动起始地址",我们可以反汇编出它的代码
fffff800`044d51b2 4c8d1587e72300 lea r10,[nt!KeServiceDescriptorTable (fffff800`04713940)]
6.把ShowSSDT.sys拖到虚拟机中,在虚拟机系统中启动InstDrv,加载此驱动
7.回到Windbg窗口,如果一切正常的话,你会看到已经中断在ShowSSDT.sys的入口代码处了
接下来,要单步还是要下断点、要继续执行什么的,就全由你来作主了~~
指定需要查看的变量的名字
dv /V VariableName
fffff800`044d51b9 4c8d1dc0e72300 lea r11,[nt!KeServiceDescriptorTableShadow (fffff800`04713980)]
bl 列出所有断点,L=List
bc[id] 清除断点,c=Clear,id是bl查看时的断点编号
2.启动虚拟机,选择调试方式进入系统
使用WinDbg和虚拟机调试Windows驱动程序教程
使用WinDbg和虚拟机调试Windows驱动程序教程(转)驱动调试攻略(WinDbg)驱动调试是一个系统级调试方式,所以调试工具用WinDbg是最佳选择。
驱动调试一般情况下,需要两台电脑进行。
一台作为主机进行驱动调试,另一台作为目标机进行驱动安装。
当然如果没有多余的电脑,我们可以安装VMware模拟系统调试(虚拟机)。
只是对电脑的配置要求比较高。
本文介绍使用WinDbg及VMware进行调试的具体设置及方法。
这些资料在网络很难找到,笔者也是吸取了他人很多宝贵意见才完成的,供大家学习讨论。
其实用SoftIce可以单机调试驱动,但是有个问题就是在SoftIce启动前驱动可能已经启动了。
VMware Support 中说,自4.0.18.0 版本之后的WinDbg 都支持了通过pipe 来进行调试,不过微软对此并没有任何说明。
所以,在VMware中虚拟被调试的系统,然后通过VMware虚拟一个com端口。
使用这个虚拟的端口,就可以用WinDbg 进行调试了。
具体步骤如下:1. 安装和设置WinDbg,VMware首先,请到微软官方网站/whdc/devtools/debugging/default.mspx,下载最新版本的WinDbg工具,建议使用6.0以上版本的WinDbg做为调试工具。
VMware也可以在网站上找到,当然使用高版本比较好。
安装过程比较简单,就不在此多做介绍。
唯一要注意的是,安装完虚拟机后,请在VMware主菜单“VM”中选择“Install VM Tools…”,完成系统驱动文件的安装。
安装完这两个软件后,请在VMware中安装跟你的电脑版本相同的操作系统。
例如:你的电脑安装的是WindowsXP Professional,那么最好在Vmware中安装相同版本。
至少是相同的系统,Windows XPßàWindows XP、Windows 2000ßà Windows 2000。
使用Windbg双机调试驱动
困扰我多天的问题终于在今天解决了,感觉很轻松啊!调试Windows内核程序不能象r3层的应用层一样,可以随便调试!毕竟人家是运行在r0层的!你要是设置中断的话,会导致整个操作系统暂停!据说以前都使用SoftICE调试,这个是一个单机调试的软件,使用后会使系统很不稳定,后来NuMega公司宣布停止SoftICE的开发,因此估计现在也不太会有人用了!!微软出的WinDbg是利用双机调试的一款软件,当然按照书上说的,肯定使用虚拟机和主机这样“双”机调试!在调试的时候要设置很多东西,我就是因为设置这些东西困惑了我整整半个学期!现在我把自己的设定写一下,也是根据书上的,但是书上说的实在是他娘的太模糊了!!下载安装winDbg和VMWare虚拟机我就不说了,已经虚拟机安装xp系统!先在虚拟机的windows安装目录下C盘下有个boot.ini(当然是处于隐藏状态,选择工具-》文件夹选项-》把隐藏受保护的操作系统文件这个选项去掉)修改boot。
ini内容改为[boot loader]timeout=30default=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 /noguibootmulti(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /debug/debugport = com1/baudrate=115200// 红色我本机绿色背景的是增加的[boot loader]timeout=5default=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 /fastdetectC:\GHLDR=一键GHOST v2010.10.10然后关闭虚拟机系统,在VMware的Commands栏中单击Edit virtual machine setting“,选择Hardware页,然后单击Add,选择Serial Port(串口),单击下一步,选择Output to named pipe 单击下一步,保持前2个不变,分别为\\.\pipe\com_1和This end is the server,第三个修改为The other end is an application,这样虚拟机就算设置好了,接下来设置主机,转到你安装WinDbg的目录下,然后右击WinDbg。
windbg 驱动调试
本文主要记录个人安装VMware+Windgb+Win7内核驱动调试的笔记。
一、安装环境1主机:Windows Vista Bussiness2虚拟机:VMware 73GUestOS: Win74Windbg: 6.11二、虚拟机配置打开相应vmware 虚拟机上的“Virtaul Machine Settings“2.“Hardware”选项中—-> 点击“Add”添加一个串口设备SeriallPort .3.”Next”,在“Serial Port”里选中“Output to named pipe”4.”next”,然后如下设置:5.确定之后,回到如下界面,在右脚”Virtual Machine Settings”页面时,在“I/O Mode”里选中“Yield CPU on poll“6. Ok之后就设定完毕了。
三、Windbg设置下载地址:Windbg安装之后,设置一个桌面快捷方式,然后,右键->属性,在Target中的引号后面添加如下:-b -k com:pipe,port=\\.\pipe\com_1,resets=0或者是:-b -k com:port=\\.\pipe\com_1,baud=115200,pipe 【二者似乎皆可】四、GuestOS设置Vista和XP不同, 没有boot.ini文件, 需要用bcdedit进行启动设置。
1. 在administrator权限下, 进入command line模式, 键入bcdedit命令, 会出现以下界面:2. 然后, 设置端口COM1, baudrate为115200 (除COM1外, 也可以用1394或USB. 1394用起来比COM口快多了, 当然前提是你需要有1394卡及其驱动. 很恶心的是Vista不再支持1394的文件传输协议, 但是用windbg双机调试还是可以的)命令为:bcdedit /dbgsettings {serial [baudrate:value][debugport:value] | 1394 [channel:value] | usb }3.接着, 我们需要复制一个开机选项, 以进入OS的debug模式命令为:bcdedit /copy {current} /d DebugEntyDebugPoint 为选项名称, 名字可以自己定义. 然后复制得到的ID号.4. 接着增加一个新的选项到引导菜单bcdedit /displayorder {current} {ID}这里的{ID}的ID值是刚生成的ID值.5. 激活DEBUG : bcdedit /debug {ID} ON这里的{ID} 的ID值还是刚才的ID值.6. 命令执行成功后, 重新启动机器.或者更简单的图形界面设置:在msconfig界面中,选Boot,再选Advanced options,在选择Debug、Debug port、Baud rate都打上钩。
windbg 内核调试原理(一)
windbg 内核调试原理(一)windbg 内核调试什么是 windbg 内核调试?•windbg 是一款强大的调试工具,可以用来调试 Windows 操作系统及其应用程序。
•内核调试是 windbg 的一个功能,用于调试操作系统内核,可以帮助开发人员定位和解决系统崩溃、死锁、性能问题等。
内核调试原理1.内核调试利用 Windows 的调试接口和调试驱动程序实现。
2.它通过在目标系统中安装一个调试驱动程序,与 windbg 配合使用,来进行调试。
3.此外,还需要使用串行线缆或网络连接将目标系统和调试主机连接起来。
准备工作•在进行内核调试之前,需要安装 windbg 和调试符号文件。
•调试符号文件包含了操作系统的调试信息,是进行调试的必要文件。
配置目标系统1.在目标系统中配置调试选项:•打开“控制面板”,找到“系统和安全”。
•点击“系统”,然后选择“高级系统设置”。
•在“高级” 选项卡下,点击“设置” 按钮。
•在“启动和故障恢复” 对话框中,点击“设置”。
•将“调试信息” 设置为“完全内存转储”。
2.进行启动选项配置:•打开“命令提示符”,输入以下命令:bcdedit /debug onbcdedit /dbgsettings serial debugport:1 baudrate:115200•这样将启用调试,并配置串行端口为 COM1,波特率为 115200。
配置调试主机1.在调试主机上打开 windbg:•首先,确保已经安装了 windbg。
•然后,在开始菜单中找到 windbg,并打开它。
2.配置串口调试选项:•点击“文件” -> “选项” -> “调试选项”。
•在“调试选项” 对话框中,选择“串行” 选项卡。
•选择正确的串行端口和波特率(与目标系统配置一致)。
连接目标系统和调试主机•使用串行线缆或网络连接将目标系统和调试主机连接起来。
开始内核调试•在 windbg 中,点击“调试” -> “启动调试”。
在VMWare下使用GDB调试器调试Windows内核
Debugging Windows kernel under VMWare using IDA's GDB debuggerCopyright 2009 Hex-Rays SA Current versions of VMWare Workstation include a GDB stub for remote debugging of the virtual machines running inside it. In version 5.4, IDA includes a debugger module which supports the remote GDB protocol. This document describes how to use it with VMWare. As an example, we'll debug a Windows kernel.Preparing VM for debuggingLet's assume that you already have a VM with Windows (32-bit) installed. Before starting the debugging, you can copy the kernel for symbol retrieval later. Copy ntoskrnl.exe or ntkrnlpa.exe (depending on the VM configuration) fromWindows/sytem32.Now edit the VM's .vmx file to enable GDB debugger stub:Add these lines to the file:debugStub.listen.guest32 = "TRUE"debugStub.hideBreakpoints= "TRUE"Save the file.In VMWare, click "Power on this virtual machine" or click the green Play button on thetoolbar.Wait until the VM boots.Debugging in IDAStart IDA.If you get the welcome dialog, choose "Go".Choose Debugger | Attach | Remote GDB debugger.Enter "localhost" for hostname and 8832 for the port number.Choose <attach to the process started on target> and click OK.The execution should stop somewhere in the kernel (address above 0x80000000). You can step through the code, but it's not very convenient without any names. Let's try to add some symbols.Identifying kernel baseTo load the kernel symbols from PDB file, we first need to know at which address it is loaded. There are many ways to find it, but we will use the KernBase pointer in theDBGKD_GET_VERSION64 structure, which, in turn, is referenced from the KPCR structure pointed to by the fs register.To retrieve the base of the segment pointed to by fs, we can use the VMWare's debug monitor "r" command. Make sure you switch the commandline interpreter to "GDB":Then type "r fs" in the commandline (hint: use "." to switch to commandline and Esc to switch back to disassembly):The address mentioned after "base" will be the address of KPCR.Navigate to the address in IDA (Jump | Jump to addres... or just "g"). You will see the start of the KPCR structure.We could just follow some well-known offsets, but for convenience we will make use of the structure definitions bundled with IDA.Choose View | Open subviews | Type libraries or press Shift-F11. You might get this warning, which is normal in this situation:Press OK to close it. If you cannot see the Loaded Type Libraries window, right-click the Types tab on the main IDA window and make sure "Desktop window" item is checked:In the Loaded Type Libraries window choose "Load type library..." from the context menu or press Ins.In the list, choose file named "ntddk" (hint: you can start typing the name to quickly navigate to it) and click OK. This will make available various structures from the Windows Device Driver Kit.Now open the structures window (View | Open subviews | Structures or Shift-F9). There, press Ins or choose "Add struct type..." from the Edit menu.Click "Add standard structure". The list of predefined structures we loaded will appear.In the list, choose structure named KPCR (again, you can start typing its name). Click OK.Now let's go back to the disassembly and apply the structure. Make sure you're at the address (fs base) we found earlier, and choose Edit | Structs | Struct var... or just press Alt-Q.Choose the KPCR structure and click OK. You might get this warning, which can be ignored:The dissassembly will display structure fields nicely represented and commented.Find the field commented KdVersionBlock and double-click or press Enter to follow it. Name the location KdVersionBlock so that it can be easily found later.Now we need to apply a structure DBGKD_GET_VERSION64, but it is not available in the type libraries shipped with IDA. Its definition is available in the file wdbgexts.h shipped with Debugging Tools for Windows or can be found on the Internet. We could create the structure manually from its definition, but it's much easier to use IDA's built-in C parser.Go to View | Open subviews | Local types or press Shift-F1. Press Ins or choose "Insert..." from the context menu.Paste the definition of the DBGKD_GET_VERSION64 structrure from wdbgexts.h file or Internet. Click OK.The structure will appear in the Local Types list, but it will not be available yet in the Structures list or in Struct var... command.Right-click it and choose "Synchronize to idb". Click Yes in the confirmation notice and OK in the info messagebox. Now we can apply the structure.Go to the KdVersionBlock location we noted before and apply the new structure (using Edit | Structs | Struct var... or Alt-Q). The structure will initially appear collapsed, press Numpad + to uncollapse it (or choose Unhide from the View menu).Now everything is nicely represented, and we can follow the KernBase pointer (the Fs at the beginning of the address are caused by sign extension and can be ignored here; double-click or Enter key still work). After following the pointer, you can see the familiar MZ signature.Loading symbolsTo load the symbols, we will make use of the new feature IDA 5.4. Go to File | Load File | PDB file...Enter path to the kernel .exe you copied from the VM and the kernel base address we found.Press OK and IDA's PDB loader plugin will retrieve the PDB file for the .exe from Microsoft's symbol store and apply its symbols to the disassembly.This should make your work much easier.Happy debugging!Copyright 2009 Hex-Rays SA。
windbg,vm9双机调试无法连接解决方案
竭诚为您提供优质文档/双击可除windbg,vm9双机调试无法连接解决方案篇一:4.双机调试的设置1)配置windbg的环境,在path变量里,在变量值后面增加:;+windgb的安装目录2)在环境变量里新建一个变量名称为_nt_symbol_path,变量值为sRV*e:\symbol*/download/sy mbols,其中e:\symbol为你的symbol的安装时方的目录3)右键新建快捷方式,地址为:"c:\programFiles\debuggingtoolsforwindows(x86)\wind bg.exe"-b-kcom:port=//./pipe/com_1,baud=115200,pipe 注意第二个"后面要有一个空格""里内容为windbg.exe的路径4)点击下一步,完成了windbg的全部配置5)编辑虚拟机设置6)点击添加,选择串行端口,点击下一步7)选择输出到命名管道,点下一步8)下一步设置如下,这里要注意要设置成//./pipe/com_1,如果设置成了\\.\pipe\com_1那你就悲剧了,搞半天你会发现不知道哪里出问题了9)点击完成,再点击确定完成串行端口的添加10)启动Vm的操作系统,打开c盘,设置文件下选项,设置为不隐藏系篇二:使用windbg进行双机内核调试使用windbg进行双机内核调试byxikug.xp版本:1.0作者:xikug/Rctxikug.xp[at]gmail[dot]com我常去的网站: /retype/zoom/3344baf1ba0d4a7302763ab7pn=2&x=0&y=0&r aww=609&rawh=393&o=png_6_0_0_158_109_674_442_1207.8 _1105.74&type=pic&aimh=309.7536945812808&md5sum=2be 43f0646d2486c13559f7f8381b9c2&sign=4f39074f06&zoom= &png=159-9006&jpg=0-0"target="_blank">点此查看我们虚拟了一个串口对,com2-com3,这对串口是联通的。
如何利用wmware实现双机调试以及windbg的配置
利用wmware实现双机调试以及windbg的配置Windbg是windows内核模块开发调试工具,当调试内核时,要求双机调试。
我称正在运行要被调试的内核程序的机器为被调试机,另一台为调试机。
Windgb 要装在调试机上。
下面要介绍的是,用WMware虚拟一个XP系统作为被调试机。
要下载的软件:windbg,WMware;1.软件的安装在机器上安装这两个软件,安装过程略。
在wmware中安一个windows系统。
2.设置调试执行虚拟机中装好windows系统之后,必须把系统设置成调试执行。
2.1windows xp以下版本调试执行的设置在系统盘中找到boot.ini。
在[operating systems]后面加一行multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP " /noexecute=optin /fastdetect/debug/debugport=com2 /baudrate=115200使之能以调试执行方式启动。
我的修改修改后的文件内容如下:[boot loader]timeout=5default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS[operating systems]multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP " /noexecute=optin /fastdetect/debug/debugport=com2 /baudrate=115200multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP " /noexecute=optin/fastdetect重启之后会出现如图2.1的选择界面。
windbg+虚拟机内核调试过程
使用Virtual PC进行Windows内核调试的详细过程使用WinDbg进行Windows内核调试通常需要两台计算机,一台是Debuggee,一台作为Debugger,又成为Host。
使用Virtual PC可以在同一台电脑上进行内核调试,对于某些调试任务来说还是非常有用的。
下面以Virtual PC 2004为例,介绍一下利用Virtual PC进行Windows内核调试的详细过程。
1,下载并安装Virtual PC 2004,从略。
2,启动Virutal PC Console(控制台),创建一台新的虚拟PC,安装向导的提示配置硬盘、内存等参数。
3,在刚才创建的虚拟PC上安装操作系统,这个操作系统应该是你要调试的Windows版本。
比如你想调试你的驱动程序在Windows Server 2003上出现的问题,那么就安装Windows Server 2003。
我们以Windows 2000为例。
4,配置虚拟PC的串行口,在Virtual PC的控制台中选择Windows 2000,然后点击Settings按钮弹出设置对话框,然后在左侧的列表中(如下图)选择COM1。
右侧选择Named Pipe选项,即使用命名管道来模拟串行口,然后输入管道的完整名称:\\.\pipe\com_1,com_1可以为其它名称,但是前面的部分应该保持不变。
5,启动虚拟PC中的Windows 2000,然后进入命令行窗口,执行如下命令以便在启动菜单中增加调试选项:c:cd\attrib -r -hedit boot.ini然后将其最末一行复制,并加入调试选项,成为为如下状态:6,在虚拟PC中选择重新启动Windows 2000,当出现启动菜单时,按方向键使其停止自动计时,等待在这里。
7,在主机(debugger)上准备启动WinDbg,考虑每次输入命令行参数太麻烦,所以建议建立一个如下内容的批处理文件,并将其放到与WinDbg.exe同位置的目录中。
Windows调试工具入门4(WinDbg内核调试配置)
WinDbg内核调试配置内核调试主要用来调试驱动代码、分析内核结构等。
WinDbg通过两台电脑可以实现内核调试,其中一台电脑运行WinDbg,被称为主机;另外一台电脑运行被调试的程序或系统,被称为目标机。
一般情况下两台电脑都是真实机器,这样调试最符合实际情况,两台电脑通过串口线、1394线或USB对联线连接起来实现双机内核调试。
如果没有两台电脑,也可以用虚拟机来模拟目标机,主机上运行WinDbg,虚拟机中安装Windows运行被调试的程序,虚拟机通过模拟的串口输出为主机上的一个命名管道,从而和主机上的WinDbg连接起来实现双机内核调试。
除双机内核调试外,WindowsXP后还引入了一种本机内核调试方式,只需要一台电脑,直接运行WinDbg就能查看修改系统内核结构等,不过所有和中断目标机系统相关的命令都不能执行,如断点命令。
如果采用虚拟机模拟目标机,调试响应速度有时候是个问题,比1394线连接的真实双机调试速度要慢不少,特别是执行操作大量内存的命令时(如搜索内存命令),感觉非常明星。
所以针对这种情况还会介绍一个特殊的辅助调试工具vmkd,该工具可以大大加速内核调试的速度,为咱们带来不少方便。
下面分节详细介绍各种内核调试情景下的配置,尽量每个步骤都截图说明。
真实机双机内核调试真实机之间的内核调试首先需要准备连接线,可以用串口线、1394线或者USB对联线。
串口线速度太慢,而且电脑城一般买不到可以直接使用的串口线,需要把线和接头买回来自己焊,按照WinDbg 帮助中的说明交叉焊接,就能得到一根可用来调试的串口线。
用串口线把两台电脑连接上后,先用Windows自带的超级终端工具,选择好串口和波特率连接。
如果在超级终端中按键能在另外一台电脑的超级终端上显示按键,则表示串口线连接成功。
接下来就可以用WinDbg连接串口调试。
某些笔记本上可能没有串口,可以买一个USB转串口的接头,然后设置USB转换后的串口号,就能把这台笔记本当作主机使用。
WinDbg远程调试配置方法
WinDbg远程调试配置方法1. 调试环境:目标机:VMware 5.5.1 + Windows XP SP2主机:Windows XP SP2 + WinDbg 6.52. 目标机配置(虚拟机)2.1 通过VMware虚拟一个com端口关闭目标机系统,运行 VMware ,点击Edit virtual machine settings -> Add -> Serial Port -> Output to named pipe;第一框里保持默认的 "\\.\pipe\com_1";第二框里选"This end is the server."第三框里选"The other end is an application."选中"Connect at power on";然后点击 "Advanced>>",选中"Yield CPU on poll",然后点完成。
2.2 设置目标机操作系统的boot.ini在目标机操作系统的boot.ini文件加入一行multi(0)disk(0)rdisk(0)partition(1) \WINNT="Microsoft Windows XP Professional - debug" /fastdetect /debug /debugport=com1 /baudrate=115200。
目标机配置完成。
3. 主机配置安装WinDbg并在桌面创建一快捷方式,点右键属性,在快捷方式目标处填写为:(此处WinDbg装在C盘)C:\Program Files\Debugging Tools for Windows\windbg.exe -k com:port=\\.\pipe\com_1, baud=11520, pipe4. 调试顺序(1) 启动目标机,进入调试程序模式(2) 运行主机中桌面的WinDbg快捷方式,就可以连接上目标机5. 附注:5.1 如何单步调试调试驱动程序时,在目标机把驱动安装完成后,需在主机的WinDbg配置Symbol、Source 以及Image的路径,配置完成后,就可以进行驱动程序的源码单步调试。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
WinDbg+VMware 调试驱动默认分类 2009-12-25 09:26:24 阅读466 评论0字号:大中小Windbg+Vmware驱动调试入门,写给wakaka小童鞋,很强大的小童鞋,同时也做为自己的存档~~Windbg的设置Windbg本身可以直接从微软的网站上下载下载地址:/whdc/devtools/debugging/default.mspxWindbg的设置其实主要是关于调试符号的设置,没有符号你会很不爽,会忽视掉许多细节,因此调试符号之于Windbg是非常重要的.1.系统调试符号的设置首先找个空间足够的位置,XP sp2的调试符号完整一点大概需要1G的空间~~比如我是在D盘,建立一个MyLocalSymbols文件夹,用来存放系统的符号文件.然后你可以从微软的网站上下载相应的调试符号包(大要180M~200M大小),要根据你虚拟机中的相应系统版本来下载,安装到MyLocalSymbols文件夹下.当然,不安装符号包的话也可以设置成调试时自动从网上下载(即使你安装了符号包,有部分内容还是要到网上下载),具体怎么设置稍后讲.不过我比较喜欢一次搞完,免得每次用的时候都要等它到网上下载比较慢~~2.自己的调试符号的设置再建一个文件夹,用于存放我们自己编译出来的驱动的符号文件.单独存放,不要跟系统的混到一起.我这里就仍在D盘建立一个MySysSymbols文件夹,用于存放自己的符号文件.然后给这个文件夹创建一个快捷方式,把它放到C:\Documents and Settings\你的用户名\SendTo文件夹下.这样,以后编译完驱动以后,直接在符号文件上右击->发送到"MySysSymbols"就可以了,很方便~~3.环境变量的设置如果你想Windbg启动时自动识别符号路径的设置的话,我们就来建立一个环境变量在"我的电脑"上右击,"属性"->"高级"->"环境变量",然后我们给当前用记新建一个名为_NT_SYMBOL_PATH的环境变量值为:D:\MyLocalSymbols;D:\MySysSymbols;SRV*D:\MyLocalSymbols*http://msdl.micros /download/symbols这样设置以后,系统的调试符号就在D:\MyLocalSymbols下,而我们自己驱动的调试符号就在D:\MySysSymbols下当符号文件不匹配时,Windbg会自动连网从/download/symbols下载符号文件到D:\MyLocalSymbols,下次再用到时就不用下载了设置好保存就可以了,修改环境变量需要重新启动系统才能生效~到这里我再说一点,当你用了一段时间之后,常用的符号文件基本上就全有了,不想等,也可以用一些方法让Windbg马上下载符号文件直接打一些正确的但是当前符号包中不正确或不匹配的符号名称可以"刺激"Windbg马上到网上下载,我为了节约时间就是这么干的.比如打dt nt!_KPCR,如果你的内核文件TimeDataStamp不匹配(内核等几个核心文件由于更新经常会这样)使得Windbg无法正确显示此符号,它就会马上乖乖地到网上把整个符号文件下载回来~~在调试符号基本全了以后(调试时基本不再出现Windbg再连网下载符号文件的情况),建议把环境变量中联网的部分去掉。
以我的为例,就是设置成D:\MyLocalSymbols;D:\MySysSymbols这样就断了它连网下载的念想,否则你一旦打错个符号,它还是会很负责地上网查找、下载,结果还是找不到,浪费很多时间~~如果确实某个符号找不到需要临时上网找,那么执行下面命令就可以了.sympath+ SRV*D:\MyLocalSymbols*/download/symbols 这样就重新恢复了Windbg上网下载符号的能力这一篇是主要是关于Vmware部分的设置,其实参考JIURL那篇很经典的《借助VMware实现单机使用WinDbg》就可以了.不过那篇文章里面有个小错误(不知道是原作者不小心,还是别人转载的时候错了),后面的波特率应为115200而非11520我就再来写一下吧,内容基本雷同,稍微精简一些Vmware的相关设置1.编辑Vmware设置,添加一个串口设备.首先我们要添加一个串口设备.打开你的虚拟机,选择“编辑虚拟机设置”然后"Add...(添加)"->"Serial Port(串口)"->"Output to named pipe(输出到命名管道)"一路Next名称就用默认的"\\.\pipe\com_1",这个其实对应于你的串口名称com1,用别的名字当然也可以,不过后面要对应第二行选择"This end is the server"第三行选择"The other end is an application"同时把下面的"Connect at power on(打开电源时连接)"请见下图:好了,这回串口设备有了.下面进行相关设置2.设置串口波特率启动虚拟机中的OS,进入系统,打开设备管理器选项,这时就看到刚才添加的串口com1了双击com1设备进入属性设置,在"端口设置"选项卡中选择"每秒位数"也就是波特率为115200(据说Windbg可以自动适应波特率,没尝试过,因此还是设置一下吧)3.修改boot.ini(如果是Vista以上就不是修改boot.ini了,需要别的修改方式)这一步准确讲是添加DEBUG启动模式,对于Win2003及以前的系统,可以通过修改boot.ini来实现对于Vista,Server2008,Win7等就得用bcdedit来编辑启动设置了有需要的可以搜索"Windbg内核调试之一Vista Boot Config设置"来查找那篇文章我的GuestOS是WinXP Sp2,所以采用boot.ini的方法打开C盘,把隐藏文件显示出来,去掉boot.ini的只读属性,双击打开来通常你只会看到一个启动选项,我们复制一个,在后面加上/debug /debugport=com1 /baudrate=115200注意修改时间timeout,不要为0或太短,否则你连选择的机会都没有~~贴个图,不会就照图中来,红线框住的部分是新加的如果你不愿新增加,直接编辑原来那个也可以,不过还是推荐新加一个好~然后你可以往虚拟机中放一些测试驱动常用的工具,比如DebugView,InstDrv等等这时关于虚拟机部分就设置完成了,可以把当前状态保存一个快照,以后如果哪个驱动把系统搞崩溃再也起不来了,恢复一下就OK了4.建立双机调试快捷方式在桌面建立一个Windbg的快捷方式命名为“双机调试”,然后编辑其属性,把“目标”后面加上-k com:port=\\.\pipe\com_1,baud=115200,pipe比如我的电脑上,完整的应该是这个样子:"C:\Program Files\Debugging Tools for Windows (x86)\windbg.exe" -kcom:port=\\.\pipe\com_1,baud=115200,pipe好了,一切设置就绪,来体验一下~~重新启动虚拟机中的系统,在启动菜单时选择有“启用调试程序”的那一项,回车确认然后把虚拟机最小化,回到桌面双击刚才建好的“双机调试”快捷方式,如果没有什么意外的话,稍等一下就会看到:Connected to Windows XP 2600 x86 compatible target,ptr64 FALSEKernel Debugger connection established.这就表示已经连接成功了,接下来会显示一下符号路径,内核基址等信息。
此时按下Ctrl+Break,就会中断下来,命令输入窗口变为可用状态,可以输入各种命令了~~如果需要进入系统之后才加载驱动的话,可以等系统启动完毕后再中断,输入断点命令.这取决于你驱动的加载时机这一节的内容是Windbg入门,用一些基本的命令告诉你如何使用Windbg~~仅作入门,更详细的可以参考Raymond老师的《软件调试》的第30章---"WinDbg用法详解"和Windbg自带的帮助文件我使用调试器的经验完全来自于Ring3的Ollydbg,所以我在初用Windbg时觉得如果Ollydbg的功能我在Windbg中都知道如何使用的话,那我基本可以叫做入门了,下面我就以这个想法来谈谈Windbg的入门~~Windbg是基于命令控制的,刚开始觉得烦琐,其实用了之后才发现很强大~~~1.基本调试控制运行程序(Run): 快捷键:F5 命令:g单步步入(Step In):快捷键:F8 命令:p单步步过(Step Over): 快捷键:F10运行到光标所在行:快捷键:F7执行到返回:gu执行到指定地址:g [Address]重新运行调试程序: 快捷键:Ctrl+Shift+F5(这个对驱动一般用不到)2.断点断点之于调试当然是非常重要的常用命令:bp [Address]or[Symbol] 在指定地址下断可以使用地址或符号,如bp 80561259(Windbg默认使用16进制)bp MyDriver!GetKernelPathbp MyDriver!GetKernelPath+0x12bp [Address] /p eprocess 仅当当前进程为eprocess时才中断这个很常用,比如你bp nt!NtTerminateProcess,但是只想在某一进程触发此断点时才断下来,那就加上这个参数吧,因为内核中的代码是各个进程共用的,所以此命令很实用bp [Address] /t ethread 仅当当前线程为ethread时才中断,用法跟/p参数类似bu [Address]or[Symbol] 下一个未解析的断点(就是说这个断点需要延迟解析)这个也很常用,比如我们的驱动名为MyDriver.sys,那么在驱动加载之前下断bu MyDriver!DriverEntry,然后加载这个驱动时就可以断在驱动入口,并且这个是不需要调试符号支持的bl 列出所有断点,L=Listbc[id] 清除断点,c=Clear,id是bl查看时的断点编号bd[id] 禁用断点,d=Disable,id即断点编号be[id] 启用断点,e=Enable,id为断点编号3.查看和修改数据调试中不可避免的要查看和修改数据查看内存:db/dw/dd/dq [Address] 字节/字/双字/四字方式查看数据da/du [Address] ASCII字符串/Unicode字符串方式查看指定地址其它常用的如查看结构dt nt!_EPROCESSdt nt!_EPROCESS 89330da0 (把0x89330da0作为对象指针)修改内存:eb/ew/ed/eq/ef/ep Address [Values]字节/字/双字/四字/浮点数/指针/ea/eu/eza/ezu Address [Values]ASCII字符串/Unicode字符串/以NULL结尾的ASCII字符串/以NULL结尾的Unicode字符串搜索内存:s -[b/w/d/q/a/u] Range Target搜索字节/字/双字/四字/ASCII字符串/Unicode字符串4.寄存器在用Windbg调试时可以Alt+4直接调出寄存器窗口,然后拖放到合适的位置就可以。