64 位 Windows 7 上 32 位进程的内存转储

64 位 Windows 7 上 32 位进程的内存转储

我用了任务管理器 (Windows 7,64 位)转储 Chrome 进程的内存。

不幸的是,尝试使用(64 位)任务管理器转储 32 位进程将生成无意义的内存转储。

如果我确实使用了任务管理器 (64 位)生成 32 位进程的转储,有没有办法转换已经完成的内存转储以便正确分析?

此外,如果您有完整的内存转储可用,那么是否可以重新创建崩溃前运行的进程和程序?

编辑:似乎很多人对我的意图感到困惑:

已经使用 Windows 创建 32 位 Chrome 进程的内存转储任务管理器 (64 位)。然后我读到一些文章说这将创建一个损坏的内存转储版本。

我想知道的是,这些转储能否正确读取?

还有第二个问题。

我说的损坏是什么意思?

来自所提供的链接之一:

如果您使用捕获 64 位转储的工具捕获转储,您仍会获得内存转储,但您将获得 syswow64 的内存转储,这意味着许多扩展(如 sos 和 psscor2)将无法读取数据。有些功能可能仍然有效,但非常有限,您可能会收到错误或错误的调用堆栈等。

也可以看看

答案1

您需要使用 sysinternals 的 Process Explorer 15.3(或更高版本),它可以了解架构并创建适当的转储。

Process Explorer v15.3:此主要的 Process Explorer 版本包括进程 CPU、私有字节、工作集和 GPU 列的热图显示、进程属性安全页面中的可排序安全组以及在 Windows 8 Taskhostex 进程中执行的任务的工具提示报告。它还会创建与目标进程的位数相匹配的转储文件并解决了 Windows 8 磁盘计数器报告中出现的一个错误。

http://blogs.technet.com/b/sysinternals/archive/2013/02/04/updates-pendmoves-v1-2-process-explorer-v15-3-sigcheck-v1-91-zoomit-v4-42.aspx

答案2

没有办法将一种内存转储转换为另一种。

如果有人想知道,你应该手动运行 32 位任务管理器:

执行以下任一操作:

如果你想生成 32 位进程的转储

在此处输入图片描述

答案3

只需打开在 windbg(x86 或 x64)上创建的转储,然后执行命令:“.effmach x86”

这将向您显示转储文件中存储的 X86 上下文。从此以后,所有命令都将在 x86 上下文上运行。

TaskManager 创建的 minidump 始终是 64 位的。请记住,在 64 位 Windows 上运行的所有 Windows 进程都是 64 位进程。只是当您的代码是 32 位时,它会在 Windows 上运行,它会在进程(32 位)和操作系统(64 位)之间来回缓冲所有调用。

相关内容