网站大量收购独家精品文档,联系QQ:2885784924

调试和测试.ppt

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Windows 2000/XP下的调试和测试 凌聪 时间:约2小时 主要内容 调试基本原理 Windbg调试 配置Windbg调试环境 DUMP调试 应用程序的迁移校验 Driver的测试 调试基本原理 编译器支持的调试符号 C函数输出方式 _fastcall 参数是放在寄存器ecx/edx中的,效率最高,输出符号@functionname@paramlength _cdel 输入参数从右向左入栈,输出符号为_funcname _stdcall 输入参数从右向左入栈,输出符号为_funcname@paramlength C++的this指针一般放在ECX中 Call/Retn原理 Call首先把EIP指针入栈,然后调转到指定的地址。 Retn retLen首先弹出eip指针,然后把esp指针加上retLen,然后跳转到刚刚弹出的eip指针处 调试基本原理 基本的函数结构 调试基本原理 栈空间 调试基本原理 优化 寄存器优化 编译器经常会把一些常用的变量放在寄存器中,于是在调试信息表中就无法直接获得C/C++的参数值 栈优化 编译器在对栈优化的过程中,往往会改写输入参数,因此如果是使用Free版本,在对Windbg的输出中要注意这个问题。 省略Org EBP指针压栈,直接操作ESP指针。往往有的时候如果没有PDB文件,Windbg输出会指向错误的位置,就是这个原因 函数优化 有些函数在优化中是直接输出的(/Oi),这类函数包括memcpy/memmove/RtlCopyMemory/RtlMoveMemory等内存操作 有些函数在优化过程中会丢失,比如memcpy/memmove/RtlCopyMemory/RtlMoveMemory,这是因为程序没有对dest参数进行操作而导致的。 调试基本原理 陷阱程序 intel CPU支持的调试接口(TF以及相关的寄存器) 帧数据以及寄存器的保留 使用kv可以看到陷阱帧数据 使用trap trapFrame可以获得陷阱发生时候的寄存器值以及对应的堆栈 调试断点 利用陷阱处理 Bp对于函数行的断点 BA针对数据的断点(intel CPU支持) 一些调试技巧 调试函数 DebugBreak OutputDebugString COM/ASP组件调试 OLE的内存泄漏和IMallocSpy NT4下的ASP进程对象在inetinfo.exe中 Win2k下的ASP进程对象是COM+引用,在DLLHost中,Win2k的调试可以不用停止服务 服务调试 应用程序的远程调试 远程调试的好处 技巧简单,不用为了不同的调试方式查不同的资料 有些程序,只有在调试模式下,才方便调试,例如CSP Windbg的远程调试 VC 6.0的远程调试(TCP/IP) VC 7.0的远程调试(TCP/IP) QA 配置Windbg基本调试环境 Windbg基本调试连接 NULL Modem 测试方法:使用HyperTerminal进行端对端连接 1394(XP) 本机调试(XP) 仅仅是SnapShot 如果需要交互方式目前只有双机互调,因此我们在以后的说明中提及的两架机器: 调试机:指调试Driver的,运行Windbg的机器 目标机:指运行Driver的机器 配置Windbg基本调试环境 调试机的配置 Symbol的安装 一些系统变量的设定 _NT_DEBUG_PORT _NT_DEBUG_BAUD_RATE _NT_SYMBOL_PATH _NT_ALT_SYMBOL_PATH _NT_LOG_FILE_OPEN _NT_SOURCE_PATH _NT_EXECUTABLE_IMAGE_PATH 目标机的配置 BOOT.ini的设定 /debugport=COMx /baudrate=xxx 配置Windbg基本调试环境 校验Symbol文件的正确性 .sympath获得symbol的路径 !sym noisy可以获得Symbol校验的详细信息 .reload module重新加载模块校验信息 注意:出现以下信息,需要重新定位Symbol(这里是针对SMP的机器,对于UP的机器时NTOSKRNL.EXE) *** WARNING: symbols checksum and timestamp is wrong 0x0036a4ea 0x00361a83 for ntkrnlmp.exe Windbg基本调试命令 U反汇编 !object查找对象 !devobj列出设备对象的属性 !drvobj列出Driver对象的属性 !irp列出irp的基本属性 .writemem把一段内存区域写文件 T Trace Into P Trace

文档评论(0)

ajgoaw + 关注
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档