在C或C++(windows)中,如何通过提供物理(非虚拟)地址来读取RAM?这意味着无需通过虚拟内存系统(mmu表),并且特定于一个进程.
我已经知道API ReadProcessMemory,它从ram中读取(由大多数培训师使用),但它仅适用于特定的过程.
我在MSDN上搜索并发现Device\PhysicalMemory似乎提供了这种可能性,但我发现没有实际的例子,这个功能似乎已被Windows服务包关闭(以修复某些漏洞).
我知道这是可能的,因为WinHex会这样做(如果你选择"工具">"打开ram">"物理内存").然后它将显示RAM内容从0x00000000到your_ram_size,就像打开传统文件一样.它需要管理员权限,但没有安装驱动程序(这意味着WinHex从用户模式执行).
编辑:添加有关操作系统的信息.
我想知道......如果当你做一个新的,预订开始的地址是0x0?我想这不可能,但为什么呢?是为此准备的新运营商?是第一个字节的一部分不可用吗?操作系统启动时始终保留它?
谢谢!