VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 318|回复: 2

[原创] 你生成的转储文件有问题吗?

[复制链接]
70_avatar_middle
最佳答案
0 
在线会员 发表于 2020-1-10 21:27:56 | 显示全部楼层 |阅读模式
前言细心的小伙伴可能注意到了,我在上一篇介绍抓取转储文件的工具的文章 —— 你需要知道的 N 种抓取 dump 的工具 中提到了:
如果用 64 位的 windbg 附加到 32 位目标进程后,直接执行.dump 命令生成的转储文件会 “有问题”。
经常抓 dump 的小伙伴很可能遇到过这个问题。具体是什么问题呢?我们一起看看吧。

问题还记得 N 年前,我用任务管理器抓取 32 位进程的转储文件后,使用 windbg 分析时,傻眼了!全是wow64 相关的栈帧,一个我关心的栈帧都没有。大概就像下图这样。(配图是我新截的,第一次分析时没保存截图)
你生成的转储文件有问题吗?
我所指的 “有问题”,就是指的这个问题。你知道怎么解决吗?

小知识在 x64 系统中,如果我们用系统自带的任务管理器为目标进程创建转储文件,不论目标进程是 32 位,还是 64 位,任务管理器将始终创建 64 位的转储文件。为 32 位进程创建的转储文件会包含 WoW64 子系统的信息,我们用 windbg 分析的时候,可能会遇到上文中提到的问题。下面是同一个 32 位进程的转储文件的调用栈截图。
第一张截图是直接使用 k 命令得到的结果。可以看到很诡异。
你生成的转储文件有问题吗?
第二张截图是使用 .load 命令加载 wow64exts 扩展后,使用其 !sw 命令切换模式后,再使用 k 命令得到的结果。可以看到,结果很完美。
你生成的转储文件有问题吗?
对,wow64exts 是我们的解决之道。如果你像曾经的我一样,不知道使用 wow64exts!sw 命令切换模式进行调试的话,是不是就 “有问题” 了?每次都手动加载 wow64exts,然后用 !sw 命令切换模式岂不是很麻烦?我们可以在加载 wow64exts 模块后,直接使用 !wow64exts.k 查看调用栈,这里就不截图了。还有更省心的办法吗?如果用 k 命令能直接看到想看的调用栈岂不是更好?有,不过我们抓取转储文件的时候需要有讲究。

procdump在 x64 位系统下,procdump 默认对 32 进程创建 32 位的转储文件。这样做的好处是,生成的转储文件中不包含 WOW64 子系统的相关信息。我们用 windbg 分析转储文件时,可以直接使用 k 系列命令查看调用栈,不需要借助 wow64exts 的帮助了,这样调试起来更简单直接。
为了更直观的感受 procdump 的好处,我专门录制了两段视频。第一段是使用 windbg 分析 procdump 为 32 位进程生成的转储文件,第二段是使用 windbg 分析任务管理器为同一个 32 位进程生成的转储文件。
你生成的转储文件有问题吗?
你生成的转储文件有问题吗?
相信大家可以直观的感受到,调试 procdump 生成的转储文件的时候,非常直接。调试任务管理器生成的转储文件的时候,需要借助  wow64exts 的帮助才可以看到正常的调用栈。

说明:
使用 procdump 默认选项生成的转储文件中不包含 WoW64 相关的信息。如果需要调试涉及 WoW64 子系统的故障,可以在运行 procdump 的时候加上 -64 选项,这样为 32 位进程生成的转储文件就包含 WoW64 子系统的信息了。我们绝大多数情况下不会调试 WoW64子系统相关的故障,所以就使用默认选项吧。


总结
  • 在 windbg 中,使用 ! 来调用扩展中的命令。
  • 使用 procdump 默认选项为 32 位进程生成的转储文件不包含 WoW64 信息,绝大多数情况下更便于我们调试。
  • 如果需要,在使用 procdump 抓取转储文件时,我们可以使用 -64 选项为 32 位进程抓取包含 Wow64 相关信息的转储文件。
  • 调试包含 WoW64 信息的转储文件,可以使用 .load 命令加载 wow64exts模块,并调用其 !sw 命令切换模式,然后就可以正常调试了。


参考资料
  • 《Windows Sysinternals 实战指南》
  • Debugging WOW64







上一篇:VC++文件路径和文件名处理函数 非常有用!
下一篇:Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
58_avatar_middle
最佳答案
52 
online_vip 发表于 2020-1-12 10:45:57 | 显示全部楼层
学习了,谢谢难哥。
70_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-1-18 20:29:20 | 显示全部楼层
thzzl 发表于 2020-1-12 10:45
学习了,谢谢难哥。

欢迎多多交流你生成的转储文件有问题吗?
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2021-8-4 21:30

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表