C ++:转储RAM内容

时间:2010-11-26 14:38:30

标签: c++ windows winapi

  • 如何在不触发访问冲突的情况下实现这一目标?

我尝试将bool指针设置为特定的起始位置,然后逐步递增它。这会导致访问冲突。

我正在使用Visual Studio 2010

4 个答案:

答案 0 :(得分:9)

Windows是一种虚拟内存操作系统。这意味着软件处理“内存” - 可能会或可能不会在某个时间点缓存在RAM中。相当多的进程内存可能存储在磁盘上 - 在页面文件中,或作为文件映射的一部分。

那么,如果你从“倾销RAM”降级到“倾销内存”,那么你需要问自己“哪个内存”。

除了作为虚拟内存操作系统之外,Windows还可以保护应用程序 - 每个进程都有自己的内存专用地址空间。因此,您需要确定要转储的内存。我们自己的过程?这很简单。使用VirtualQuery检查块并将其转储出来。

看另一个过程?那更复杂。存在安全障碍,阻止不受信任的应用程序查看更受信任的进程内存。如果您有足够的权限,VirtualQueryEx将允许您检查另一个进程。

最后,如果你想检查内核内存,那么你需要开发某种驱动程序:根本不允许用户模式代码查看内核内存。

答案 1 :(得分:1)

这是特定于操作系统的。对于Windows,您可以使用VirtualQuery()来获取“可读”内存页面的地图。

答案 2 :(得分:1)

你可以使用MiniDumpWriteDump()创建一个转储文件,并探索它,因为你只是好奇。

答案 3 :(得分:1)

要跟进@ John的回答,如果你想检查内存和正在运行的进程的其他状态,你真的必须要了解the DbgHelp API。这是一项非常重要的工作,基本上您正在编写自己的调试器。

John建议的一个简单的minidump将是一个良好的开端,不需要相同的努力,但这将允许您检查过程状态的快照。