首页 > 解决方案 > 访问物理内存地址

问题描述

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

标签: winapiassemblyoperating-systemdriver

解决方案


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

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

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


推荐阅读