MiniDump文件的生成(二)

news/2024/11/24 13:27:28/

       在《MiniDump文件生成(一)》中简单的介绍了一下怎样在程序崩溃的时候生成供调试使用的DMP文件,本文将详细的介绍一下MINIDUMP_TYPE中的每一种类型以及针对每一种类型所生成的DMP文件中将包含哪些特定信息。

首先来看一下,Windows对MINIDUMP_TYPE结构的定义

1. MiniDumpNormal

    这是最常见的一种类型,通常情况下是函数MiniDumpWriteDump的默认值。使用该选项所生成的DMP文件中将包含如下信息:

    1)系统信息。包括操作系统的版本号、SP版本号以及CPU的一些基本信息。

2)进程信息。包括进程ID,进程的创建时间、发生异常的时间。

3)模块信息。包括进程所加载的所有可执行模块的信息(加载地址、大小、完整的文件名、版本号等)。

4)线程信息。包含进程所属的每一线程的信息(线程ID、优先级...)。

5)线程栈。包含每一个线程的线程栈。

6)指令集。对于每一个线程,包含EIP前后256B的指令数据。

7)异常信息。

2. MiniDumpWithFullMemory

该选项是除了MiniDumpNormal之外的另一个较常用的选项。使用该选项,当前进程地址空间中的每一个可读的页都将包含在所生成的DMP文件中。

使用该选项的好处是:可以查看进程地址空间中的任何内容,包括栈中的数据,分配在堆上的数据以及PEB和TEB;

使用该选项不好的地方是,生成的DMP文件很大,通常会有几十M。

3. MiniDumpWithPrivateReadWriteMemory

使用该选项,只有进程的私有页(不和其它进程共享的页面)会被包含在生成的DMP文件中。具体包括:堆、栈中的数据,PEB和TEBs。

4. MiniDumpWithIndirectlyReferencedMemory

使用该选项,MiniDumpWriteDump会扫描每个线程的线程栈,寻找具有如此特征的指针,该指针指向进程地址空间中的可读页面;对于每一个找到的、具有上述特征的指针,MiniDumpWriteDump将该指针前后1024B的数据,指针前256B、指针后768B,写入生成的DMP文件中。

使用该选项生成的DMP文件可以用来分析“heap corruption”异常。

使用该选项需要注意:MiniDumpWriteDump并不区分扫描到的数据是真正的指针还是普通的变量值,例如:

MiniDumpWriteDump扫描得到一个值:0x02000(一个局部变量),而0x2000恰好是一个具有上述特征的指针,那么MIniDumpWriteDump将会不做区分的将0x01FFF~0x2300,共1024B的数据写入生成的DMP文件中。

5. MiniDumpWithDataSegs

使用该选项,当前进程加载的所有可执行模块的可写数据段将被写入到生成的DMP文件中。如果想在DMP文件中查看全局变量而又不想用MiniDumpWithFullMemory,那么可以是要该选项。

6. MiniDumpWithCodeSegs

使用该选项,当前进程加载的所有可执行模块的代码段将被写入生成的DMP文件中。

7. MiniDumpWithHandleData

使用该选项,在进程发生异常的那一刻,进程句柄表中的所有句柄信息将被写入生成的DMP文件中。

8. MiniDumpWithThreadInfo

使用该选项,如下的线程扩展信息将被写入生成的DMP文件中:

1)线程的创建时间、执行时间(包括用户态和内核态的执行时间)

2)线程的起始地址;

3)线程的派生关系。

9. MiniDumpWithProcessThreadData

使用该选项,生成的DMP文件将包含PEB和TEB以及它们所引用的内存空间所包含的数据。

10. MiniDumpWIthFullMemoryInfo

使用该选项,进程虚拟内存的布局信息将被写入到生成的DMP文件中。使用该方式对所生成的DMP文件的大小依赖于进程虚拟内存的布局----每一个具有相似属性的页面都将在生成的DMP文件中写入48B的数据。

11. MiniDumpWithoutOptionalData

使用该选项,可以过滤掉一些不必要的数据已减少生成的DMP文件的大小。规则如下:

1)只包含具有MiniDumpNormal属性的数据;

2)如果声明了MiniDumpWithoutOptionalData,那么即使下述选项显式声明,相应的数据也不会被写入到生成的DMP文件中:

MiniDumpWithFullMemory, MiniDumpWithIndirectlyReferenced, MiniDumpWithPrivateReadWriteMemory

3)该选项不会影响下述选项的结果:

MiniDumpWithProcessThreadData, MiniDumpWithThreadInfo, MiniDumpWIthHandleData, MiniDumpWithDataSegs, MiniDumpWIthCodeSegs,MiniDumpWithFullMemoryInfo.

12. MiniDumpFilterMemory

使用该选项,栈中的数据在写入生成的DMP文件之前,只保留恢复调用栈的数据而将其它的数据置0。这将导致根据生成的DMP文件只能恢复调用栈而不能查看发生异常是的函数调用参数和局部变量信息。

使用该方式不能减少生成DMP文件的大小。

13. MiniDumpFilterModulePath

使用该选项,所生成的DMP文件之包含进程加载的模块的文件名而不包含模块的全路径。

14. MiniDumpScanMemory

该选项与MiniDumpCallback共同使用来确定是否将某一特定模块以及该模块的信息写入到所生成的DMP文件中。

(待续...)




http://www.ppmy.cn/news/574799.html

相关文章

写入的dump文件为0kb (1、MiniDumpWriteDump 简单理解)

1、了解下MiniDumpWriteDump MiniDumpWriteDump (vs2008) MSDN ImageHlp.h 文件 // …… 4647-4657BOOL WINAPI MiniDumpWriteDump(IN HANDLE hProcess,IN DWORD ProcessId,IN HANDLE hFile,IN MINIDUMP_TYPE DumpType,IN CONST PMINIDUMP_EXCEPTION_INFORMATION Excepti…

处理minidump文件用到的“工具”的分享

前言 最近崩溃平台有BUG,native的崩溃堆栈解析不出来,只能自己线下人肉解堆栈了。本着能善用工具提高工作效果的习惯,最终收获了如下的zshe脚本(方法)用于后续的工作,借此笔记跟大家分享与交流&#xff0c…

简单分析minidump

转载自:http://91dengdeng.cn/2019/05/07/%E7%AE%80%E5%8D%95%E5%88%86%E6%9E%90minidump-1/ 简单分析minidump(1) 有了前几节的准备工作,我们的程序已经可以自动捕获异常了,那么我们开始通过windbg来分析dump解决实际问题。先从简单入手&am…

Minidump 文件分析工具

Minidump 文件分析工具 microsoft, 解决问题, 计算机, 操作系统, 存储器 许多人可能经常遇见计算机频繁重新启动的问题,总是难于解决问题,最后只能重新安装操作系统.我介绍的这篇文章应该能解决许多人这样的痛苦.   通常在荡机…

异常处理与MiniDump详解(4) MiniDump

异常处理与MiniDump详解(4) MiniDump write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件 一、 综述 总算讲到MiniDump了。 Dump有多有用我都无法尽数,基本上属于定位错误修复BUG的倚天剑。(日志可以算是屠龙刀)这…

操作系统——银行家算法的模拟与实现

一:实验题目 银行家算法的模拟与实现 二:实验目的 (1) 进一步了解进程的并发执行。 (2) 加强对进程死锁的理解,理解安全状态与不安全状态的概念。 (3) 掌握使用银行家算法避免死锁问题。 三、总体设计(含背景知识或基本原…

亚马逊云科技数据库市场份额提升迅速,合作伙伴和开发者生态系统为其赋能

对比常规的基础设施上云和应用上云,企业对于数据上云一直保持最为慎重的态度。不过也不是一成不变的,Gartner前不久公布的一组数据显示,在2022年全球数据库管理系统的市场份额排名中,作为纯云厂商的亚马逊云科技,超越了老牌传统数据库厂商甲骨文和微软,首次位居第一。 降低企业…

Android应用分身的实现和解析

1 背景 从去年下半年360奇酷手机发布后,国内的手机新品发布,都会提到应用分身、微信双开等类似概念,有一些第三方应用也以分身/双开作为亮点抢占市场,一时间分身类应用成为主流手机的一个必备功能。 在了解和比较了国内的分身…