【问题标题】:Access to physical ram addresses访问物理内存地址
【发布时间】:2021-10-28 06:58:49
【问题描述】:

在研究作弊和反作弊的工作原理时,我对如何访问物理(而非虚拟)RAM 地址产生了兴趣,例如,在 Windows 中,MmAllocateContiguousMemory 用于从物理地址读取(在某些情况下)例子) 但是访问物理内存地址是如何工作的(我没有找到任何不使用 nativeApi 或 WinApi 的 asm/C 示例)。我想windows完全控制内存并且只提供使用它的shell——但是在不同的操作系统和windows中,对内存的访问也是以某种方式实现的,它是如何工作的,是否可以在没有winapi/nativeApi的情况下读取物理内存[ memtest 以某种方式工作))]

【问题讨论】:

  • “但是对物理内存地址的访问是如何工作的” - 它由 MMU 在硬件中处理。
  • @Dai 如果我理解正确,发帖人想知道是否有直接访问物理地址的API——就像/dev/mem在Linux下所做的那样。
  • 请注意,物理地址空间包含内存映射 IO 区域 (MMIO)、设备内存和 ROM,以及物理 RAM。

标签: winapi assembly operating-system driver


【解决方案1】:

当操作系统启动时,它会启用虚拟内存。从那时起,对内存(地址空间)的每次访问都通过 CPU 的 MMU。
控制 MMU 是一项特权操作,只有特权代码(阅读:操作系统)才能更改 MMU 配置。
MMU 配置控制虚拟地址映射到的物理地址。

当您要求 Windows“读取”一个物理内存范围时,它实际上设置了 MMU,以便返回的 虚拟范围映射到给定的物理内存。
然后您像往常一样读取虚拟内存。
虚拟内存不是物理内存旁边的东西,它在物理内存之上。
它总是在那里。

所以用户空间程序在没有操作系统帮助的情况下无法访问物理内存,一旦启用,CPU 将始终使用虚拟内存。
事实上,这会带来安全风险,因为它绕过了虚拟内存在物理内存之上提供的安全机制(内存隔离)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 2019-06-16
    • 2014-09-06
    • 2014-04-27
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多