随笔分类 -  Dump Checking

关于看Dump文件的一些知识
Move EDI, EDI的作用
摘要:玩WinDBG的时候, 发现函数的反汇编代码的最开始部分总是包含一条move edi, edi的指令. 比如下面的代码生成汇编代码的开头部分如下:Push EBP和Mov EBP, ESP两条指令是标准的栈框架建立的指令, 但是Mov EDI, EDI是做什么的呢? 看起来它就是两个字节的NOP指令.正解:mov edi, edi的确是个双字节的no-op指令, 它存在的目的是使得hot-patc... 阅读全文

posted @ 2011-01-01 18:10 中道学友 阅读(2997) 评论(0) 推荐(0) 编辑

在WinDBG中进行进制转换和简单的计算
摘要:在WinDBG中可以进行一些简单的计算工作, 比如16进制与10进制之间的相互转换, 加减乘除等. 举例1, 进制转换: 注意, 上面的例子中的第二个命令告诉我们, 十进制的数字在windbg中进行表示的时候前面要加上前缀"0n", 而十六进制则可不必带上前缀"0x". 举例2, 除法计算: Debugging Tips: Use windbg as a calculator, a chat... 阅读全文

posted @ 2011-01-01 13:58 中道学友 阅读(2092) 评论(0) 推荐(0) 编辑

伪寄存器
摘要:许多寄存器的名字取决于处理器的架构, 因此对于那些偶尔使用调试器的用户来说很难记住所有平台上的寄存器名字. 为了克服这个问题, 调试器的开发团队引入了各种伪寄存器(Pseudo-Register), 由调试器将这些伪寄存器对应到不同的硬件架构上. 所有的伪寄存器都由一个美元符号($)开始. 如果你使用MASM语法, 你可以在$符号之前添加一个@符号, 这个@字符会告诉debugger接下来的tok... 阅读全文

posted @ 2011-01-01 13:44 中道学友 阅读(1167) 评论(0) 推荐(0) 编辑

如何使用符号文件?
摘要:几乎每个命令都会直接或者间接地使用符号信息. 进行符号检查的命令却不多. 查看符号的命令是x, 这个字符表示"查看符号". 语法如下所示: 0.00x [options] module!symbols module和symbols都可以包含通配符. 在调试陌生代码时, 通配符是一种功能强大的工具, 因为它使我们在阅读代码之前能够猜测函数的名字或者全局变量. 其中, 带有_imp前缀的函数... 阅读全文

posted @ 2010-12-27 16:30 中道学友 阅读(1022) 评论(0) 推荐(0) 编辑

如何验证已经加载的symbol file与module是否匹配?
摘要:可以使用!chksym命令. 该命令接受一个内存地址作为参数, 只要这个内存地址属于某个module的范围之内, 那么该命令就会检查这个module的symbol和module是否匹配. !chksym 01000005 举例如下: 阅读全文

posted @ 2010-12-27 12:53 中道学友 阅读(365) 评论(0) 推荐(0) 编辑

成功运行过的WinDBG Commands–12-26-2010
摘要:lm v m 02samp* 列出module的信息, v代表verbose, 即详细, m代表可以使用通配符, 02samp*意图是匹配用02samp开头的所有module !lmi 02sample 显示模块的header中的信息. !lmi接受模块名或者模块地址作为参数 !sym noisy !sym quiet 符号加载过程的详细输出和非详细输出. 用于帮助你检查符号加载过程中可能出现的问... 阅读全文

posted @ 2010-12-26 22:26 中道学友 阅读(301) 评论(0) 推荐(0) 编辑

.reload 命令的一些常用形式
摘要:.reload /f 命令会强制debugger立即解析所有module相关联的符号文件. 于是我就想, 有没有什么命令可以立即去掉所有module相关联的符号文件呢? 找了半天也没找到, 最后发现.reload /f的反命令就是.reload 其他形式 =========== .reload module 抛弃模块module的符号信息. 任何解析符号的动作都将从硬盘上重新加载符号文... 阅读全文

posted @ 2010-12-26 22:24 中道学友 阅读(3141) 评论(0) 推荐(0) 编辑

为<<Advanced Windows Debugging>>配置符号路径
摘要:纸上得来终觉浅, 绝知此事要躬行. 笔者开始动手运行AWD一书中的例子了. 在这里下载源文件, 可执行文件以及符号文件. 一开始设置符号路径的时候就遇到了困难, 这里记录下解决问题的过程. 先把最终可以正常工作的命令写在这里: .sympath srv*c:\symstore.pri*http://msdl.microsoft.com/download/symbols 1. 在http:... 阅读全文

posted @ 2010-12-24 22:59 中道学友 阅读(620) 评论(0) 推荐(0) 编辑

什么是符号文件?
摘要:在构建应用程序, 库, 驱动程序或者操作系统是, 编译器和链接器会在创建.exe, .dll, .sys以及其他可执行文件(也被称为二进制文件或者映像)的同时, 还会创建一定数量的附加文件, 这些文件也被称为符号文件(Symbol File). 从Windows Xp和Windows Server 2003开始, 符号文件只使用PDB格式. 符号文件通常包含以下内容: 全局变量的名字和地址 函... 阅读全文

posted @ 2010-12-24 21:28 中道学友 阅读(1486) 评论(0) 推荐(0) 编辑

介绍一个好用的抓取dump的工具-ProcDump
摘要:Procdump是一个轻量级的Sysinternal团队开发的命令行工具, 它的主要目的是监控应用程序的CPU异常动向, 并在此异常时生成crash dump文件, 供研发人员和管理员确定问题发生的原因. 你还可以把它作为生成dump的工具使用在其他的脚本中. 有了它, 就完全不需要在同一台服务器上使用诸如32位系统上的Debug Diag 1.1或是64位系统上的ADPlus了. 问题描述 ... 阅读全文

posted @ 2010-12-20 10:43 中道学友 阅读(18099) 评论(1) 推荐(0) 编辑

记一个托管的dump无法查看托管调用栈的问题
摘要:朋友让我帮忙看一个dump, 我打开看了看, 发现一个怪异的问题. 用命令"~*e!clrstack"查看所有线程的托管调用栈, 居然说所有的线程都不是托管线程. 0:045 ~*e!clrstackOS Thread Id: 0x16d4 (0)Unable to walk the managed stack. The current thread is likely not a manage... 阅读全文

posted @ 2010-12-16 16:51 中道学友 阅读(1690) 评论(1) 推荐(1) 编辑

使用WinDBG排查应用程序加载时崩溃的问题
摘要:假设有个应用程序, 一启动就崩溃, 根本就来不及让你用Visual Studio来Attach, 并且该应用程序在使用Visual Studio直接lunch的情况下又不会出现这样的问题, 该怎么办呢? 除了使用<<在进程崩溃的时候自动抓取一个DUMP文件>>中的方法, 还可以使用WinDBG直接加载应用程序的可执行文件, 然后在应用程序退出的系统函数上下断点, 从而得到... 阅读全文

posted @ 2010-12-02 13:37 中道学友 阅读(1795) 评论(0) 推荐(0) 编辑

如何明确指定命令所在的debugger extension?
摘要:问题的场景是这样的, 你在看dump文件, 运行了一个命令, 可是你觉得这个命令跟平常你看到的该命令的输出有点不大一样. 你感觉很困惑, 怀疑是不是这个命令不属于你希望的那个debugger extension. 怎么办? 比方说, psscor2.dll 和 sos.dll 都包含有一些命令, 你的debugger 又同时加载了两个debugger, 你运行了一个!threads, 却不清楚这... 阅读全文

posted @ 2010-10-12 14:25 中道学友 阅读(720) 评论(0) 推荐(0) 编辑

!aspxpages(即!dumphttpcontext)命令输出的解释
摘要:在排查ASP.NET网站High CPU问题时, 经常使用hang dump来确定常规手段难以发现的原因. 经常会使用!aspxpages命令来查看当前进程中都有那些资源正被请求, 被请求的资源都运行了多久. 这个命令的输出样本如下. 0:000> !aspxpagesGoing to dump the HttpContexts found in the heap.Loading the ... 阅读全文

posted @ 2010-10-11 15:29 中道学友 阅读(528) 评论(0) 推荐(0) 编辑

无法查看.NET Framework 1.1的dump文件?
摘要:经常看的dump都至少是.net framework 2的dump文件, 冷不丁开一个.net 1.1的dump, 发现问题还挺多. 经过一番摸索, 最后还是成功地查看了这个dump. 解决方案如下: 1. 在debugger所在的机器上安装.net framework 1.1. 2. 在debugger所在的机器上安装.net fraemwork 1.1 SP1 3. 使用.loadby so... 阅读全文

posted @ 2010-10-05 22:21 中道学友 阅读(957) 评论(0) 推荐(0) 编辑

WinDBG抓Full Memory Dump的命令
摘要:.dump /u /ma c:\temp\notepad.dmp 另附ADPlus命令例子 ADPlus -hang -p 1896 –o c:\temp ADPlus -hang -pn myapp.exe 阅读全文

posted @ 2010-09-24 10:31 中道学友 阅读(1991) 评论(0) 推荐(0) 编辑

介绍SOS中的SaveModule命令
摘要:这个命令允许你把一个已经加载到内存中的一个镜像(DLL, EXE)写回到一个文件中. 这非常有用, 尤其是你在debugging一个full memory dump, 并且没有原始的exe或dll的时候. 这个命令通常用来保存一个托管二进制信息到一个文件中, 稍后你就可以使用Reflector来反汇编里面的代码了. 首先, 使用lm命令来获得image的base address. 0:000&g... 阅读全文

posted @ 2010-08-13 14:54 中道学友 阅读(771) 评论(0) 推荐(0) 编辑

如何在WinDBG里获得关于命令的帮助?
摘要:标准命令帮助 ============ ? ? /D 元命令帮助 ============ .help .help /D .help /D a* 扩展命令帮助 ============= !help !help savemodule 在命令行中开启WinDBG的chm帮助 ============= .hh .hh lm 参考资料: Windows Debuggers: Part 1: A... 阅读全文

posted @ 2010-08-11 12:01 中道学友 阅读(480) 评论(1) 推荐(0) 编辑

如何从WinDBG命令行得知当前抓取的dump属于什么进程?
摘要:可以使用命令"|", 这个command的英文名叫做vertical bar. 举例: 0:018> |. 0 id: 598 examine name: C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\BIN\OWSTIMER.EXE 参考资料: WinDBG帮助 阅读全文

posted @ 2010-08-11 11:23 中道学友 阅读(591) 评论(0) 推荐(0) 编辑

如何在WinDBG里保存运行过的命令的历史记录?
摘要:比方说你抓了个full dump, 在debug一个很复杂的问题, 可能你已经有了结果, 或者还在研究当中, 这时你被别的事情打搅了, 回家了, 第二天来重开dump文件, 不记得昨天做到哪里了. 在或者说, 你的同事很牛, 他分析了dump文件并得出了结论. 你想学一下他的思路. 在这两种情况下, 让windbg把曾经输入过的命令按顺序写到文件里的功能就相当有帮助了. 命令举例如下: .writ... 阅读全文

posted @ 2010-08-11 11:07 中道学友 阅读(956) 评论(0) 推荐(0) 编辑

导航

技术追求准确,态度积极向上