如何使用WinDbg分析的崩溃转储VC++应用程序?
-
06-09-2019 - |
题
我怎么使用 WinDbg 为分析转储的文件?
解决方案
这里有一些一般性步骤,这将让你用自己的方式:
第一,必须改变编译器的设置使得它创建了PDB的文件,甚至对于释放生成。以后的版本中的 视觉C++ 编译器做这个默认,但在许多版本的视觉C++你必须这样做你自己。创建程序的数据库文件,然后保持一个归档,这些文件随着各建立的应用程序。至关重要的是,每一个建立应用程序都有自己的一套Pdb.你不能只是重复使用相同的你让与建设10个研究堆所产生的建造15,例如。在生活的项目中,你将会结束了一吨的Pdb,所以要做好准备。
接下来,你必须要能够识别的准确版本的应用程序而产生的倾倒的文件。如果你创造你自己的小型转储(通过调用 MiniDumpWriteDump() 例如),可能是最简单的方法来做到这一点是简单地做出部分的文件的转储的完整版本数量应用程序。你会需要有一个合理的版本的编号方案为这一工作。在我的店里,我们增加生数量在所有分支机构通过一个每次自动编译创建一个建立。
现在,你有收到转文件的客户,你知道精确的版本的应用程序创建的垃圾场,你已经找到了PDB文件,为此建立。
现在你需要通过你源控制的历史,找到源码为这个精确的版本的软件。最好的方式来做到这一点是应用"标签",以你的树枝每次你犯了一个建立。设置价值的标签,以精确的版本号以及它变得容易找到的历史。
你几乎可以准备开火了WinDbg/C++:
- 获得完整的源代码对该版本的应用程序。把它放在一个单独的地方,你的硬盘驱动器上说
c:\app_build_1.0.100
为应用版本1.0建立#100个。 - 得到的二进制文件,确切版本的应用程序并把他们的某个地方你的硬盘驱动器。这可能是最简单的,只需要安装这一版本的应用程序得到的二进制文件。
- 把PDB的文件在同一位置,作为二进制文件中的步骤2。
现在你有两个选择对于观看的倾倒的文件。你可以使用 Visual Studio 或WinDbg.使用Visual Studio是容易的,但WinDbg是更强大。大部分时间的功能在Visual Studio就足够了。
使用Visual Studio,你所要做的是打开文件转储喜欢它是一个项目。一旦打开,"执行"的倾倒文件(文件F5 通过默认)和如果所有的路径,设置正确,它会带你到代码的崩溃,给你打电话的堆,等等。
使用WinDbg,你要跳过一两圈:
- 开始WinDbg
- 打开转储的文件。(Ctrl + D 通过默认)
- 告诉WinDbg去得到正确的MicroSoft符号文件。类型
.symfix
.这可能需要一些时刻,因为它将拉吨的东西从互联网上。 - 告诉WinDbg其中的符号(PDB文件)。类型
.sympath+ c:\pdblocation
, 替换无论你把PDB文件pathname.确保你得到加标志在那里没有空间.sympath
和+
签名或者别你会搞砸了步骤3。 - 告诉WinDbg其源代码。类型
.srcpath c:\app_build_1.0.100
代路径在那里你得到了代码从源头控制这个版本的软件。 - 告诉WinDbg分析转储的文件。类型
!analyze -v
几分钟后,如果一切都是正确配置,WinDbg会带你去你的位置崩溃。在这一点上,你有一百万选择挖掘的深入应用程序的存储空间、国家的关键部分,窗户,等等。但是这是 方式 超出范围的这一员额。
祝你好运!
其他提示
(见"倾销"部分下面)
基本教程和示威的使用WinDbg
不同的方式"开始"/附加WinDBG
工作区
理解如何工作区的工作...
Cmdtree
一个"cmdtree"可以定义的"菜单"的调试器的命令,为便于访问经常使用的命令而不必要记得简洁命令的名称。
你不必把所有的命令定义为同cmdtree文本的文件。...你可以保持他们单独的并载多个,如果你的愿望(他们然后让他们自己的窗口)。
- 惊人的帮手。cmdtree
- 我如何做一个cmdtree窗口停靠在启动在WinDBG
- 使它更容易调试。净转储在windbg使用。cmdtree
- Microshaoft Cmdtree
- 特殊命令执行命令从一个定制用户接口。cmdtree
启动脚本
你可以使用的-c的选项的命令行自动运行的一个WinDBG剧本的时候你开始WinDBG.
给个机会,把在仔(调试器标记语言)的模式,负载特定的扩展,设置。净异常断点,核心标志(例如当核试你可能需要改变DbgPrint掩所以你看到跟踪信息。...ed nt!Kd_DEFAULT_Mask0xffffffff),载cmdtrees,等等。
一个例子脚本:
$$ Include a directory to search for extensions
$$ (point to a source controlled or UNC common directory so that all developers get access)
.extpath+"c:\svn\DevTools\WinDBG\Extensions"
$$ When debugging a driver written with the Windows Driver Framework/KMDF
$$ load this extension that comes from the WinDDK.
!load C:\WinDDK\7600.16385.1\bin\x86\wdfkd.dll
!wdftmffile C:\WinDDK\7600.16385.1\tools\tracing\i386\wdf01009.tmf
$$ load some extensions
.load msec.dll
.load byakugan.dll
.load odbgext.dll
.load sosex
.load psscor4
$$ Make commands that support DML (Debugger Markup Language) use it
.prefer_dml 1
.dml_start
$$ Show NTSTATUS codes in hex by default
.enable_long_status 1
$$ Set default extension
.setdll psscor4
$$ Show all loaded extensions
.chain /D
$$ Load some command trees
.cmdtree c:\svn\DevTools\WinDBG\cmdtree\cmdtree1.txt
.cmdtree c:\svn\DevTools\WinDBG\cmdtree\cmdtree2.txt
$$ Show some help for the extensions
!wdfkd.help
!psscor4.help
.help /D
命令作弊表
扩展
"扩展"允许你来扩大范围的命令/功能支持内部WinDBG.
- bigLasagne(bldbgexts&blwdbgue)
-装法强调和一个驱动器的映射工具) - BigLib数读者
- Byakugan
-检测antidebugging方法,vista堆的可视化/仿真的,跟踪缓冲存储器 - 呼叫流分析+KnExt
- CmdHist
-记录每一个命令,您执行了在调试届会议,所以你可以重新执行很容易 - 核心分析仪
-检查堆结构的腐败,检测对象的共同的线,等等 - dom WinDBG扩展
-(!stlpvector,!idt,!unhex,!查询等) - dumppe
-垃圾场PE文件从存储器 - 图像的观众扩展(弗拉基米尔*Vukićević)
- 英特尔操作的发展调试工具包
-调试操作固件
- leaktrap
-GDI/户处理跟踪,以帮助在泄漏检测 - 蒙娜丽莎 (需要PyKD)
-设定的命令要援助的先进的分析发现漏洞 - 毫秒
-提供自动化崩溃的分析和安全风险评估 - narly
-列出了有关的信息载的模块,如果使用SafeSEH,ASLR,DEP/GS(缓冲区的安全检查) - netext (罗德尼亚纳)
-(!wservice表WCF服务对象,!wconfig。config线,!whttp表HttpContexts,!wselect/!wfrom-支持SQL样的查询,上阵列) - ODbgExt
-打开调试器的扩展 - OllyMigrate
-通过调试对象,另一个调试器,而无需重新启动 - Psscor2
-一个超集SOS协助在调试。网2.0代码管理 - Psscor4
-一个超集SOS协助在调试。净4管理的码 - PyDBGExt
-允许python脚本是用
- PyKD
-允许蟒蛇能用脚本WinDBG - sdbgext(Nynaeve)
-(!valloc,!vallocrwx,!heapalloc,!heapfree,!立的,!remotecall64,!loaddll,!unloaddll,!近,!killthread,!adjpriv,!ret) - SieExtPub
-遗产扩展...现在建成WinDBG在ext.dll - SOSEX
-更多的命令,用于帮助管理调试的净2.0或4.0码 - 防范小组委员会/SDBGExt2(史蒂夫Niemitz)
-(!DumpHttpContext,!DumpASPNetRequests,!DumpSqlConnectionPools,!DumpThreadPool等) - Uniqstack
源于一个调试器扩(需要一个系统的网上账户的访问) - viscope
-代码复盖图 - 等待链Traversal/wct.dll (更调试的扩展
-显示等待链中的应用程序线(帮助找到 僵局) - windbgshark
-集查看的协议分析使VM交通操纵和分析 - WinDBG扩展(萨沙*戈尔茨坦)
-追踪,增,heap_stat,bkb,traverse_map,traverse_vector) - WinDBG突出 (ColorWindbg.dll)[使用谷歌翻译翻译链路]
-asm法突出
写你自己的延伸
使用WinDBG调试代码管理
- 打破一个例外
- 打破对具体CLR异常
- 调试。净框架的源代码内Windbg
- 调试的例外情况在管理代码使用Windbg
- 调试管理的码使用和WinDbg SOS.dll
- 调试WinDbg.僵局中的应用。
- 管理调试WINDBG.引进和索引
- 设置。净断点在Windbg的应用程序的崩溃,在启动
Scripting(C#PS,蟒蛇,WinDBG)
- KDAR(核Debugger抗攻击)
-集合的WinDBG脚本 - Sysnative死机Scripts/处理应用程序
- WinDBG脚本库
-集合的WinDBG脚本 - 脚本MDbg和DbgHostLib
-允许管理的代码编写的管理Debugger(MDBG)和DbgEng - ExtCS
-允许控制的WinDBG通过C#脚本 - PowerDBG
-允许控制的WinDBG通过Powershell脚本
- Pykd
-允许控制的WinDBG通过蟒蛇的脚本 - windbglib
-蟒蛇的包装库周围的pykd扩展WinDBG,模仿immlib(所以你可以用脚本原来写的免疫调试器)
调试程序/工具的使用dbgeng.dll API/WinDBG工具
- 一个简单的Dbgeng根据用户的模式,调试器
- 橡子。调试净的僵局探测器 (使用cdb.exe)(下载)
- CLR管理调试器 (MDBG)
- DbgHost-怎么控制的一个调试的发动机
- 调试诊断工具v1。2 (DebugDiag), 2.0版本 + DebugDiag的博客
- Dynamorio -动态的二进制仪器的工具,它可以与WinDBG
- IDA + WinDBG插件
- GUI WinDBG
- LeakShell (找到托管的泄漏)
- mdbglib管理调试API
- PyDbgEng
-蟒蛇的包装Windows调试的发动机 - SOSNET -一WinDBG叉的/替代的外壳,集中于使用SOS扩展和支持C#脚本
- SOSNET O2叉 -叉的SOSNET使用Rosyln C#REPL(read-eval--印刷环)scripting engine
- 除/Vivisect (kenshoto)-提供了一个交叉平台,调试API层在WinDBG
- WinAppDbg + Heappie-WinAppDbg
- 编写基本的Windows调试器
不同的方式产生崩溃转储文件进行事后分析
- DebugDiag2.0
- 倾倒的小抄
-包括如何产生的倾倒从Hyper-V,VMWare程序,并且虚拟机。 - Citrix SystemDump
- 键盘按键组合
- MiniDumpWriteDump
-(通过WIN32API调内部应用程序)。 (例如C#应用程序) - 例开关, 或 (这)
(硬件基于功能产生一些特殊的...通常发现在高端服务器例如 HP 或者你可以得到加PCI卡 "普遍PCI甩开关").Microsoft例的技术 背景. - Procdump
- 系统|先进的系统设置的|启动和恢复
(注册信息),
(如何配置一个完整的(全部)转储存),
(如何能够完全转储存),
(如何能够完全转储存在Windows7时的电脑有很多的记忆...通常不超过2GB的记忆) - 任务经理"的创建文件转储"
- 用户转储, 指令 (很老的工具)
- UserModeProcessDumper, 指令
- Visual Studio"保存转储为..."
- WER(Windows错误报告。...当地的垃圾场)
- WinDBG
转存分析工具
- BlueScreenView -发现的小型转储。dmp保存的文件通过窗户后一个死机,并提取有关的信息是什么引起的崩溃
- 调试。分析仪 (可以分析转储的文件和插件可以编写的。NET)
- 悲伤的-简单的后倾 (死后分析仪)
- 波动性 -框架用于分析"存储器"中记录转储文件(抄)
转储相关的工具
- Citrix dumpcheck-检查一致性的倾倒文件(看起来像是被遗弃的 链接 + 链接)
- dumpchk (第一部分的调试工具)-检查一致性的一个垃圾场文件
- MoonSols Windows记忆的工具包 (formerly windd)转换为各种原转储存的文件进WinDBG兼容dmp文件
- vm2dmp -微软Hyper-V虚拟机状态存储器转储器
- vmss2core -转换VMWare快照文件变成一个核倾倒的文件(下载), (指令)
核试虚拟机
视频
- .净裂101号2-WinDbg基础知识
- .净调试用于生产环境(Channel9)
- dotnetConf-先进的调试WinDbg和SOS
- 大卫Truxall"调试WinDBG"
- 迈克Taulty调试的存储器泄漏
- oredev2009年会议:调试。净的应用WinDbg
- Pluralsight高级Windows调试
(再加上各种各样其他的人在Pluralsight) - 苔丝Ferrandez WinDBG(Channel9)
博客
一些博客(混合母和管理的码调试)。
- 先进。净调试
- 所有你的基地都属于我们 (萨沙Goldshtein)
- 分析-v
- ASP.NET 调试
- Cyberiafreak (线程和高级windows prog和调试)
- 调试Analyzer.NET
- 调试和超越
- 调试的专家杂志的在线
- 调试工具箱 (Windbg脚本、调试和诊断工具和技术来帮助你隔离软件的问题。)
- 解密我的世界
- greggm的博客
- 俊峰张的窗户注意到编程
- 乡村的花絮
- 标记Russinovich的博客
- Mike摊位。净调试的博客
- 纳文*博客
- 从来没有怀疑你的Debugger(卡罗)
- 注意到从一个黑暗的角落
- Ntdebugging的博客 (Microsoft全球升级的服务工作队)
- Nynaeve.冒险在Windows调试和逆向工程
- 辉瑞开发人员注意事项领域
- Visual Studio调试器的团队
- WinDbg通过Volker von Einem
先进的文章和教程的资源
- 先进的技术调试,在WinDbg
- 调试应用程序MS.Net 和Windows(幻灯片)
- 调试STL容器与WinDbg
- "调试"教程1-7的(演示-托比Opferman)
- Debugging.tv
- Developmentor WinDBG标记的文章
- 符博士的安全的博客恶意软件教程,分析反向工程方法
- 利用编写的教程第5部分:如何调试器模块和插件可以加速基本利用发展
- 狩猎后门
- 远程Microsoft的Windows服务器操作系统核试使用Dell Windows调试用(DWDU) (戴尔(TM)Windows(R)调试用1.1README)
替代调试器
- 刀 - (Inguma)(GUI radare)
- BugDbg
- 调试++ (没有发布)
- Debuggy
- 褪色的环0调试器 (下载)
- edb (Linux)
- FDBG
- GoBug
- 哈迪斯(环3个调试器与反调试器,检测战略)
- 斗 (Linux,OS x和Windows)(Windows调试目前没有实施)
- Hyperdbg
- IDA调试器
- ImmunityDebugger
- Nanomite
- 黑曜石(非侵入性的调试器)
- OllyDBG
- PEBrowse
- RaceVB6 (维生素b6P码debugger)
- radare
- radare2ui (GUI radare)
- 拉斯塔环0调试器 (RR0D)
- Syser核调试器
- TRW2000年 (很老的调试器,大约W9x)+ dions插件归档
- VisualDux调试器
- Wintruder (可扩展的调试器)
- WKTVDebugger (一个调试器视觉基本的P-Code)(下载)
- x64_dbg
- Zeta调试器
其他链接
- 协作RCE工具图书馆
-巨大的收集的调试和系统层面工具 - cr4zyserb
-很大的插件和其他调试工具 - 如何写一窗户调试器引用(德文草)
大收藏的链接给你详细信息,你会需要的,如果你想写自己的调试器例如PDB文件格式.DMP文件的格式,PE文件的结构,如何记录堆的痕迹,等等,等等。 - Tuts4You
-unpackers、IDA,OllyDBG、免疫调试器插件,等等。
这是一个非常广泛的问题。
- 第一步是加载文件转储到一个WinDbg的实例。
- 接下来,你需要确保有一个符号的设置。
- 最后,可以执行命令
!analyze -v
得到一个基本进行的分析。你需要有象征信息可用你的代码来做倾倒的文件值得的。
该网站 存储场,软件跟踪、调试、恶意软件,Victimware和情报分析门户网站 已经非常丰富对我来说。我也真的很喜欢这本书, 高级Windows调试 由马里奥Hewardt和丹尼尔Pravat.
苔丝Ferrandez具有很大基本教程和实验室的设置,可以立即开始使用WinDbg。我高度推荐它们。