【问题标题】:Accessing Physical Memory via a High Level Language e.g.通过高级语言访问物理内存,例如
【发布时间】:2012-04-09 13:19:49
【问题描述】:

我正在研究通过高级编程语言执行 Windows 7 机器内存 (RAM) 转储的最佳方法,例如C#。我已经对此进行了大量研究,我将在下面进行总结。

•微软 API 对内存的访问似乎在一段时间前被切断了 (\Device\PhysicalMemory)

现在看来,要访问内存,您的代码必须在内核模式下执行,而不是在用户模式下才能访问内存

我研究了 Windows 在系统挂起时如何转储内存(小型、大型和内核转储),这种方法不适合我的要求

我想知道是否有人对我应该如何访问机器的物理内存有很好的了解。由于我习惯于编写窗口应用程序,因此我对低级编码语言的了解很少。到目前为止,我收到的建议包括编写一个驱动程序来访问内存,然后通过更高级别的编程语言调用它。

任何社区可以提供的任何帮助都将不胜感激!提前致谢。

【问题讨论】:

  • 您将如何处理转储? procdump -ma 在您的环境中不够用吗?
  • 即使使用低级语言也很难访问物理内存。您收到的建议很可能是最明智的方法。
  • 我的搜索让我找到了 procdump -ma 但不幸的是它只允许您转储单个进程的内存。我正在考虑访问完整的内存,包括操作系统加载的文件等。如果有人有任何其他建议,或者正如 Mat 所说,我可能需要沿着驱动程序路线前进,我将不胜感激。 noonnb & Justin 我已根据您的建议采取了行动。干杯
  • 如果这在用户模式下是可能的,那将是一场安全灾难。如果您也可以写入内存,那将是一场保护和安全灾难。你需要一个司机。 “我对低级编码语言的了解很少”——如果可以的话,你应该避免这项任务。

标签: c# memory dump ram memory-dump


【解决方案1】:

使用procdump -ma。这给出了单个进程的完整状态。让内核模式的人来调试操作系统。

根据我使用 WinDBG 进行内核模式调试的短暂经验,我建议从第二台 PC 和 Firewire 链接开始。在被测系统上,卸下硬盘驱动器并安装带有符号的操作系统。确保您有一个带有符号的操作系统的良好基础映像,以便在您破坏它时使用。

在我要阅读的 WinDBG 书籍的简短列表中,有“Programming the Windows Driver Model”,Oney,MSPress。

This may help.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 2019-12-12
    相关资源
    最近更新 更多