我用了任务管理器 (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 磁盘计数器报告中出现的一个错误。
答案2
没有办法将一种内存转储转换为另一种。
如果有人想知道,你应该手动运行 32 位任务管理器:
执行以下任一操作:
如果你想生成 32 位进程的转储
答案3
只需打开在 windbg(x86 或 x64)上创建的转储,然后执行命令:“.effmach x86”
这将向您显示转储文件中存储的 X86 上下文。从此以后,所有命令都将在 x86 上下文上运行。
TaskManager 创建的 minidump 始终是 64 位的。请记住,在 64 位 Windows 上运行的所有 Windows 进程都是 64 位进程。只是当您的代码是 32 位时,它会在 Windows 上运行,它会在进程(32 位)和操作系统(64 位)之间来回缓冲所有调用。