ImageVerifierCode 换一换
格式:PPT , 页数:36 ,大小:644.50KB ,
资源ID:4528221      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-4528221.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(WinDBG调试技巧.ppt)为本站会员(weiwoduzun)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

WinDBG调试技巧.ppt

1、WinDBG调试技巧,Leo Jiang ,什么是WinDBG,Debugging Tools for Windows简称为WinDBG 根据CPU指令架构的不同分为: x86版 下载6.8.4.0 AMD64版 下载6.8.4.0 IA64版 下载6.8.4.0,WinDBG可以调试什么?,调试应用程序 调试驱动 分析dump,WinDBG VS VC自带调试器,WinDBG利用自带的符号检查下载工具,可以获包含VC自带的符号文件外,系统大部分DLL或EXE的符号文件,调试粒度更小。而VC除了自带的符号文件,和自身产生的符号文件外,只能使用DLL导出的函数作为符号。 WinDBG可以调试驱动

2、;VC不能,只能作为普通的应用程序调试器 WinDBG和VC都支持远程调试,WinDBG和VC调试器的关系,相同的核心dbghelp.dll+dbgeng.dll 不同的IDE 只是VC没有把核心所有的功能都开放出来,WinDBG加载符号,File - Symbol File Path; 或者 Ctrl + S; 或者命令行,两种符号格式,srv*jiangfengbingsymbols$*http:/ 表示从jiangfengbingsymbols$这个可写共享去加载pdb,如果pdb不存在则从http:/ ; 表示;后面还有一个符号信息 D:workcodekistrunkproductw

3、in32d 表示要加载D:workcodekistrunkproductwin32d目录里面的pdb文件,让VC获得同样的符号加载功能,把WinDBG安装目录下的symsrv.dll拷贝到VC的IDE目录,类似于D:DevToolsMicrosoft Visual Studio 8Common7IDE,VC2005默认是有这个文件的,但版本已老 启动VC,打开Tools - Options中设置(每个版本的VC设置有所不同),用WinDBG保存dump,发现程序运行异常,又不能立刻确定原因,又怕调试后找不到原因,且现象不能重现。这个时候需要保存现场。 打开WinDBG,按F6 attach到目

4、标进程,然后.dump /ma C:dumpxxx.dmp 不要直接退出WinDBG,先detach在退出WinDBG,否则目标进程会被关闭 对测试来说,这个功能很有效。 dump不是崩溃的时候才能产生,而是随时可以产生,只要你会用WinDBG,使用WinDBG分析dump,KIS2008在编译的时候都保存了pdb文件,而且加入了异常模块生产dump,所以分析dump变成了程序员的基本要求 没有技巧,只有流程 加载崩溃程序的pdb(要版本相符),加载系统模块的pdb,符号越全越好;符号不全,可能导致你看到的stack是错误的 如何看加载了哪些symbol,使用命令lm,WinDBG会把该进程的

5、module都显示出来,如果有symbol,后面会显示symbols字样,对于应用崩溃(包括应用程序和驱动)产生的dump,在加载完符号后,可以让WinDBG自动分析分析,执行命令!analyze -v即可。 对于手工尝试的dump,一般current thread不是出问题的thread,所以要看所有的线程,执行命令*kb,显示所以的线程的call stack。 大部分问题,只要看一眼就出来了。设置好源代码的路径,甚至可以找到出问题的一行。 其他所要使用到的技巧后面再详细阐述。,注意,用户通过键盘触发的minidump是没有分析意义的。 调试,分析就是找联系;符号,代码,等都是联系的桥梁,如

6、果没pdb,怎么办?那image(目标dll或者exe)就是你的主要桥梁了,IDA将是你手中的另一个利器。,主动调试应用程序,打开WinDbg,Ctrl+E,打开想要调试的EXE 打开WinDBG,F6,attach到要调试的进程 *设置symbol加载路径,设置源代码目录,使用WinDBG就和VC一样,包括快捷键 *优点:如果你在测试的机器上调试问题,装VC根本不现实,而安装WinDBG则很容易,体积小,你只要把你开发机器上的符号,源代码共享,就可以利用这个体积轻量级的工具实现功能非轻量级的调试了。,被动调试,一般用来调试服务。因为我们没法由我们的调试器去加载服务进程。服务进程只能由serv

7、ice.exe去创建。 因此我们希望目标一启动,我们的调试器就attach上去了。 WinDBG自动的工具Global Flags可以帮我们的忙,当然也可以使用VC的即时调试器 大部分服务是不和桌面交互的,所以在WinXP下面,你还需要把服务设为和桌面交互的,否则WinDBG运行在一个你看不见的桌面,而你又过不去那个桌面。 sc config kis type= own type= interact 然后启动服务,你就看见WinDBG出来了 请快速的让进程走过RegisterServiceCtrlHandlerEx这个函数。 否则超时后,进程和WinDBG都会被结束,不再有调试机会。,被动 V

8、S 主动,调试是大胆假设,小心求证的过程 断点,watch 只要能达到目的就是好方法。 MessageBox VS _asm int 3 MessageBox 让程序运行到指定的地方,等待主动进入的调试 _asm int 3让程序运行到指定的地方,直接触发进入即时调试器,把WinDBG作即时调试器用,想要崩溃的时候就由WinDBG调试 执行windbg.exe -I,辅助Appliction Verifier,不是WinDBG的特有功能,VC的调试器也可以配合AppVerifier 原理:AppVerifier替换了一些关键API,并在这些API上作检查验证,并以调试信息输出和产生int 3中

9、断的形式告诉外面的调试器 用来发现一般调试发现不了的问题,和模拟低资源的情况,进阶技巧(命令篇),.exr 显示异常记录 !handle 显示一个handle的信息 .thread 切换current thread !locks 检查有无死锁 u 反汇编指定地址 d db dd 显示指定地址的内存 bp bc bd 下断点 清断点 禁断点 ba 下内存断点,进阶技巧(内核调试),联机内核调试是NT系统自带的一个功能,使用softice可以作单机的内核调试,但缺点太多,不再流行 掌握了双机连接的流程,调试驱动就像调试应用程序一样。 双机联调其他方式 1394卡,很方便,但需要host和targe

10、t机都有1394卡,虚拟机不能模拟 USB,XP很麻烦,需要特殊的cable,好像用VMWare可以调试Vista系统,进阶技巧(实战),一个真实案例的微缩版本 update.exe,kavstart.exe,kwatch.exe 你看到的现象是update.exe卡死,而真正的原因是kwatch.exe里面出了问题,进阶技巧(二次开发),利用WinDBG的二次开发接口进行开发 利用dbghelp.dll(+dbgeng.dll)进行定制功能的调试器开发,如:dump自动分析器 如果是完全安装WinDBG的,在WinDBG安装目录,将有一个sdk目录,里面有二次开发的头文件,lib文件,sam

11、ple和详细的帮助,驱动开发注意问题,Nonpaged和Paged Pool,Nonpaged资源有限,但Nonpaged可以在各个IRQL上访问 注意CPU切换,即KeWaitForXXX,KeSetEvent等的操作(例如:IRQL = DISPATCH_LEVEL时KeSetEvent第三个参数必须为FALSE,某些时候不允许CPU切换) IRQL过低时KeRaiseIrql,操作完再KeLowerIrql IRQL过高时,自己创建SystemThread去做,或者IoQueueWorkItem把任务插都system的队列里面去做 善于利用Bug Check信息,驱动的Verifier,DriverVerifier,WHQL测试,针对平台+驱动+功能的一个比较完备的测试 功能完整性 驱动稳定性 通过测试才可以获得驱动的数字签名 https:/ 订阅WHQL周报,其他工具,DeviceTree Winobj IrpMon DbgView( or DbgMon),End,Question & Answer Thanks!,

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报