随笔分类 -  Dump Checking

关于看Dump文件的一些知识
Debug相关的一些小技巧
摘要:1. 如何Debug一个进程的子进程? 答: 使用WinDBG attach到父进程, 然后输入命令".childdbg 1"(无引号). 这样子进程在刚刚被加载的时候, WinDBG就Attach上去了. 这两个进程的debug session都在一个WinDBG的窗口里, 如果想要切换当前进程, 可以使用命令"|"来查看所有的进程, 使用"|0s"来切换到ID为0的进程, 以此类推. ... 阅读全文

posted @ 2012-10-17 10:31 中道学友 阅读(1279) 评论(0) 推荐(0) 编辑

一些ADPlus配置文件的收集
摘要:定断点在方法ntdll!RtlEnterCriticalSection 上, 一旦执行到这个方法, 就写log, 记录callstack, 并且打印寄存器的值. 定断点在地址77f5b380 上, 动作同前一个. <ADPlus> <!-- Configuring ADPlus for breakpoints --> <!... 阅读全文

posted @ 2012-08-31 16:22 中道学友 阅读(645) 评论(0) 推荐(0) 编辑

Kernel Mode Debugging 初步 一
摘要:什么是kernel mode debugging? Kernel debugging是使用WinDBG来检验受限制的内存, 调用栈, 内部数据结构, 内部布局, 以及运行在kernel mode的操作系统组件和驱动的系统信息的过程. 在kernel mode下, 你debug的是整个操作系统, 而不是某一个应用程序, 线程, 或者进程. 这意味着你对程序的执行拥有完全的控制权, 并且需要保证你... 阅读全文

posted @ 2012-08-31 14:44 中道学友 阅读(1814) 评论(0) 推荐(0) 编辑

一些debug常用的"魔法"数值
摘要:CCCCCCCC 微软C++ debugging运行时用该值标记未初始化过的栈内存 CDCDCDCD 微软C++ debugging运行时用该值标记未初始化过的堆内存 FEEEFEEE 微软的HeapFree函数用该值来标记被释放了的... 阅读全文

posted @ 2012-08-08 12:44 中道学友 阅读(2069) 评论(0) 推荐(0) 编辑

WinDBG中的poi是做什么用的?
摘要:Poi操作符在WinDBG中可以被用来对指针进行解引用. 类似C语言中对指针的操作符*. 比如说, 如果一个地址为0×00123456的指针, 指向地址0×00420000, 即 内存地址 地址中存放的值 0×00123456 0×00123456 0×... 阅读全文

posted @ 2012-08-04 23:32 中道学友 阅读(4718) 评论(0) 推荐(0) 编辑

64位的dump里如何寻找第一个到第四个参数?
摘要:这篇文章讲解的三种方法非常详细, 还可以跟随着作者的代码一起试验. 推荐. Challenges of Debugging Optimized x64 Code http://blogs.msdn.com/b/ntdebugging/archive/2009/01/09/challenges-of-debugging-optimized-x64-code.aspx 另外两篇文章也值得一... 阅读全文

posted @ 2012-08-03 14:03 中道学友 阅读(499) 评论(0) 推荐(0) 编辑

X64 Calling Convention 的一个实验
摘要:很久没更新blog了, 最近比较忙. 这篇文章转自我的onenote, 所以中英文都有, 记给自己, 也分享给大家. 没必要纠结语言, 能看懂就行了. 呵呵.以下结论非常重要, 摘自<<Advanced Windows Debugging>> Page 606. Rcx: contains the 1st parameter passed to the function. Rdx: contains the 2nd parameter passed to the function. R8: contains the 3rd parameter passed to the 阅读全文

posted @ 2012-06-05 15:49 中道学友 阅读(1299) 评论(0) 推荐(0) 编辑

WinDBG脚本入门
摘要:最近开始看一些针对非托管进程的WinDBG的使用了, Tess推荐去看Debugging Toolbox. 其第一篇就把我难住了, 脚本看不懂. 动手实践了一下, 发现下面的文章所讲的内容特别有帮助, 于是转载在这里. 原文地址 First steps with WinDBG scripting… (Memento) http://www.msuiche.net/2007/08/03... 阅读全文

posted @ 2012-03-15 11:09 中道学友 阅读(1256) 评论(0) 推荐(0) 编辑

利用PsExec提升命令行的安全级别, 绕过组策略执行命令
摘要:有一次, 我需要在客户的环境上抓取Time Travel Tracing, 简称TTT(dump的一种). 但是就是不能成功抓取. 报错如下: 具体错误信息如下: c:\Debuggers\ttt>tttracer -dumpfull -out e:\tttoutput -attach 3384 Microsoft (R) TTTracer 2.010.40929 (Se... 阅读全文

posted @ 2012-03-12 10:16 中道学友 阅读(3611) 评论(0) 推荐(0) 编辑

无法抓DUMP, 报错"Could not attach to process XXXX, NTSTATUS 0xC0000048"
摘要:Problem Description ================= We tried to use ADPlus to capture dump file. But the size of dump files are all under 20K. We tried it many times. Trouble Shoot ================= I tried ... 阅读全文

posted @ 2012-03-09 15:23 中道学友 阅读(10220) 评论(0) 推荐(1) 编辑

Failed to load data access DLL, 0x80004005
摘要:新年第一篇, 首先祝大家2012身体健康, 工作顺利, 先来篇简单的. 0:031> .load psscor2 0:031> !clrstack CLRDLL: CLR DLL load disabled Failed to load data access DLL, 0x80004005 Verify that 1) you have a rece... 阅读全文

posted @ 2012-01-03 15:21 中道学友 阅读(2773) 评论(0) 推荐(0) 编辑

记一次纠结的排错-用WinDBG解决WinDBG Hang的问题
摘要:今天早上, 客户传来了一个hang dump, 急着想看看, 结果WinDBG每次在菜单里点击了Open Crash Dump之后, 都会hang住. 重试, 结果一样. 重启WinDBG, 结果一样. 重启机器, 结果一样. 卸载重装WinDBG, 结果一样. 怀疑Debug Diag 1.2有问题, 卸掉, 结果一样. 修改了默认的symbol path... 阅读全文

posted @ 2011-10-17 11:27 中道学友 阅读(1411) 评论(0) 推荐(0) 编辑

[技巧]如何获得某个callstack所在线程的线程号?
摘要:检查dump文件的时候, 我们经常会使用下面的命令来获得所有线程上的调用栈 ~*e !clrstack 输出结果举例如下: OS Thread Id: 0x1b30 (15) Child-SP RetAddr Call Site 0000000034a9ed00 000006424e611fc0 System.Thread... 阅读全文

posted @ 2011-09-23 10:32 中道学友 阅读(1294) 评论(0) 推荐(0) 编辑

记一个在live debugging一个托管进程时, BPMD无法定下断点的问题的解决方案
摘要:SharePoint 2010的某些DLL会被进行一种叫做Pre-compiling的优化, 所使用的工具叫做Ngen.exe. 优化过后, 托管的dll会被制作为native image, 之后呢Runtime每次都会使用native image, 而不是传统的托管DLL. 这种优化可以加快DLL的加载, 因为需要执行代码的很多动作都被提前做好了. 然而, 这样的优化会给在WinDBG中Liv... 阅读全文

posted @ 2011-08-04 14:03 中道学友 阅读(397) 评论(0) 推荐(0) 编辑

一点小小的心得
摘要:今天通过看dump来解决一个SharePoint的性能问题, 不小心钻了牛角尖. 盯着托管调用栈看. 其实, 换成k命令去遍历每个线程的非托管调用栈, 一下子就看到了绝大多数线程都在等SQL. 所以, 虽然w3wp.exe多数是托管线程在处理页面请求, 当发现托管调用栈信息有限的时候, 不妨换非托管调用栈检查一下. 阅读全文

posted @ 2011-06-30 17:40 中道学友 阅读(299) 评论(0) 推荐(0) 编辑

在WinDBG中查看内存的命令
摘要:当我们在调试器中分析问题时, 经常需要查看不同内存块的内容以分析产生的原因, 并且在随后验证所做出的假设是否正确. 由于各个对象的状态都是保存在内存中的, 因此内存的内容也就相当于对象的状态. d命令最常见的格式就是根据指定的类型信息来显示存储在某地址中的数据. 调试器并不会去猜测这个地址上存储的是什么数据, 因为在大多数情况下猜测都是错误的. 所以需要用户显式地制定按照何种格式来解析数据. 命令... 阅读全文

posted @ 2011-01-09 22:37 中道学友 阅读(25695) 评论(0) 推荐(1) 编辑

在WinDBG中查看变量的命令
摘要:命令 ============ dv Display Variable的缩写, 查看局部变量. dv /i 查看局部变量, 并显示符号的类型和参数类型. dv /V 查看局部变量, 并显示变量的存储位置. dv /V VariableName 指定需要查看的变量的名字 dv 02sample!gGlo* dv命令可以带有通配符, 来查看具有某命名模式的变量. 举例: dt Display Typ... 阅读全文

posted @ 2011-01-02 20:46 中道学友 阅读(23695) 评论(0) 推荐(0) 编辑

在WinDBG中设置断点的命令
摘要:命令==========~0 bp 02sample!KBTest::Fibonacci_stdcall "r esp"在零号线程上的KBTest类的Fibonacci_stdcall函数上设置断点, 并且在触发断点时执行"r esp"命令.bl列出所有已经设置了的断点bc *清除所有断点bp 02sample!KBTest::Fibonacci_stdcall “r esp;g”在所有线程上设置断点, 并且在触发断点时执行"resp;g"两条命令.bm 02sample!*kbtest*命令bm可以在参数中指定一个符号模式, 这样在所有与这个符号匹配的地址上都将设置一个断点. 上面的命令使用 阅读全文

posted @ 2011-01-02 14:28 中道学友 阅读(6407) 评论(0) 推荐(0) 编辑

在WinDBG中查看调用栈的命令
摘要:命令 ========== k k命令显示的是一定数量的栈帧, 其中帧的数量是由.kframes命令来控制的, 默认值是256。 kp 5 显示调用栈中前5个函数以及他们的参数. kb 5 显示调用栈中前五个函数以及他们的前三个参数. kf 5 显示在调用栈中五个函数所使用的栈的大小. 每个栈帧所占的空间使用量的计算方法是: 将当前函数的栈基指针与在函数中调用的任何一个函数栈基指针相减. 举例: 手动构造栈的实践- 如何手工构造调用栈 ============ 首先用几幅图说明一下栈的特点, 帮助大家理解. 1. 栈向低地址增长. 2. 向栈中压入数据, 栈中的情况如图. 3. 阅读全文

posted @ 2011-01-01 22:26 中道学友 阅读(20446) 评论(1) 推荐(2) 编辑

在WinDBG中查看函数的反汇编代码的命令
摘要:命令 ========== u . u $ip 上面的两个命令是效果是一样的, 反汇编当前$ip地址上的8条命令. uf . uf $ip 上面两个命令的效果是一样的, 反汇编当前$ip地址上的整个函数. ub . ub $ip 反汇编$ip之前的8条指令. ub $ip L2a 反汇编$ip地址之前的42条指令. u $ip $ip+a 反汇编地址$ip到地址$ip+10之间的指令. 注意, 这里包括$ip, 不包括$ip+10。 举例: 阅读全文

posted @ 2011-01-01 21:30 中道学友 阅读(12403) 评论(0) 推荐(0) 编辑

导航

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