Windbg的设置.doc_第1页
Windbg的设置.doc_第2页
Windbg的设置.doc_第3页
Windbg的设置.doc_第4页
Windbg的设置.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Windbg的设置Windbg本身可以直接从微软的网站上下载下载地址:/whdc/devtools/debugging/default.mspxWindbg的设置其实主要是关于调试符号的设置,没有符号你会很不爽,会忽视掉许多细节,因此调试符号之于Windbg是非常重要的.1.系统调试符号的设置本帖隐藏的内容需要回复才可以浏览首先找个空间足够的位置,XP sp2的调试符号完整一点大概需要1G的空间比如我是在D盘,建立一个MyLocalSymbols文件夹,用来存放系统的符号文件.然后你可以从微软的网站上下载相应的调试符号包(大要180M200M大小),要根据你虚拟机中的相应系统版本来下载,安装到MyLocalSymbols文件夹下.当然,不安装符号包的话也可以设置成调试时自动从网上下载(即使你安装了符号包,有部分内容还是要到网上下载),具体怎么设置稍后讲.不过我比较喜欢一次搞完,免得每次用的时候都要等它到网上下载比较慢2.自己的调试符号的设置再建一个文件夹,用于存放我们自己编译出来的驱动的符号文件.单独存放,不要跟系统的混到一起.我这里就仍在D盘建立一个MySysSymbols文件夹,用于存放自己的符号文件.然后给这个文件夹创建一个快捷方式,把它放到C:Documents and Settings你的用户名SendTo文件夹下.这样,以后编译完驱动以后,直接在符号文件上右击-发送到MySysSymbols就可以了,很方便3.环境变量的设置如果你想Windbg启动时自动识别符号路径的设置的话,我们就来建立一个环境变量在我的电脑上右击,属性-高级-环境变量,然后我们给当前用记新建一个名为_NT_SYMBOL_PATH的环境变量值为 :D:MyLocalSymbols;D:MySysSymbols;SRV*D:MyLocalSymbols*/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上网下载符号的能力这里只是设置部分,关于Windbg的初步使用稍后会写,小童鞋莫急哦这一篇是主要是关于Vmware部分的设置,其实参考JIURL那篇很经典的借助VMware实现单机使用WinDbg就可以了.不过那篇文章里面有个小错误(不知道是原作者不小心,还是别人转载的时候错了),后面的波特率应为115200而非11520我就再来写一下吧,内容基本雷同,稍微精简一些Vmware的相关设置1.编辑Vmware设置,添加一个串口设备.本帖隐藏的内容需要回复才可以浏览首先我们要添加一个串口设备.打开你的虚拟机,选择“编辑虚拟机设置”然后Add.(添加)-Serial Port(串口)-Output to named pipe(输出到命名管道)一路Next名称就用默认的url=file:/./pipe/com_1.pipecom_1/url,这个其实对应于你的串口名称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=.pipecom_1,baud=115200,pipe比如我的电脑上,完整的应该是这个样子:C:Program FilesDebugging Tools for Windows (x86)windbg.exe -k com:port=.pipecom_1,baud=115200,pipe好了,一切设置就绪,来体验一下重新启动虚拟机中的系统,在启动菜单时选择有“启用调试程序”的那一项,回车确认然后把虚拟机最小化,回到桌面双击刚才建好的“双机调试”快捷方式,如果没有什么意外的话,稍等一下就会看到:Connected to Windows XP 2600 x86 compatible target,ptr64 FALSEKernel Debugger connection established.这就表示已经连接成功了,接下来会显示一下符号路径,内核基址等信息。此时按下Ctrl+Break,就会中断下来,命令输入窗口变为可用状态,可以输入各种命令了如果需要进入系统之后才加载驱动的话,可以等系统启动完毕后再中断,输入断点命令.这取决于你驱动的加载时机这一节到这儿,下一节Windbg的基本使用,马上就来.这一节的内容是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 AddressorSymbol 在指定地址下断可以使用地址或符号,如 bp 80561259(Windbg默认使用16进制) bp MyDriver!GetKernelPath bp MyDriver!GetKernelPath+0x12bp Address /p eprocess 仅当当前进程为eprocess时才中断这个很常用,比如你bp nt!NtTerminateProcess,但是只想在某一进程触发此断点时才断下来,那就加上这个参数吧,因为内核中的代码是各个进程共用的,所以此命令很实用bp Address /t ethread 仅当当前线程为ethread时才中断,用法跟/p参数类似bu AddressorSymbol 下一个未解析的断点(就是说这个断点需要延迟解析)这个也很常用,比如我们的驱动名为MyDriver.sys,那么在驱动加载之前下断bu MyDriver!DriverEntry,然后加载这个驱动时就可以断在驱动入口,并且这个是不需要调试符号支持的bl 列出所有断点,L=Listbcid 清除断点,c=Clear,id是bl查看时的断点编号bdid 禁用断点,d=Disable,id即断点编号beid 启用断点,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 ValuesASCII字符串/Unicode字符串/以NULL结尾的ASCII字符串/以NULL结尾的Unicode字符串搜索内存:s -b/w/d/q/a/u Range Target搜索字节/字/双字/四字/ASCII字符串/Unicode字符串4.寄存器在用Windbg调试时可以Alt+4直接调出寄存器窗口,然后拖放到合适的位置就可以。要修改呢就直接双击相应的项就可以了。把命令的方式也说一下,比较简单:r 显示所有寄存器的值r eax 显示eax的值r eax=1 修改eax的值为15.辅助命令!process 显示当前进程信息!process 0 0 显示当前所有进程(会有僵尸进程)!process 1f4 显示pid为1f4的进程信息,后面也可以跟eprocess的值!thread 显示当前线程信息!thread!process 1f4 显示tid为768的线程信息,后面也可以跟ethread的值栈相关:k 显示调用栈kb 显示ebp和前3个参数kp 以函数调用形式显示栈以上就是常用的命令了来个简单的实践过程,步骤如下:1.编译好你的驱动,假设名为ShowSSDT.sys,并把驱动符号文件ShowSSDT.pdb发送到MySysSymbols文件夹下(之前设定的自己的调试符号文件夹)2.启动虚拟机,选择调试方式进入系统3.迅速打开“双机调试”,建立调试连接,详细过

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论