据我所知,每个用户进程都有一个虚拟地址空间,可以转储。但有没有办法转储物理地址空间?假设我有32位系统和4GB内存,我可以编写一个程序来打印每个物理内存位置。
我理解它违反了内存保护等但是如果可能的话怎样才能将它转换为内核进程或更低级别的进程以允许我访问整个内存..?
我想知道如何在Windows / Linux平台(或内核)上编写这样的代码(如果可能的话)。或者如果我要使用Assembly或类似的东西,如何转移到该权限级别
答案 0 :(得分:2)
在Linux中,您可以打开并映射设备文件/dev/mem
(如果您具有读取权限)。这对应于物理内存。
答案 1 :(得分:0)
can i write a program to print each physical memory location.
我认为没有操作系统可以让用户访问物理内存位置。所以,你不能。您所看到的是操作系统生成的虚拟地址。
答案 2 :(得分:0)
在Windows上,可以直接访问物理内存。你可以做的一些事情:
这些方法都不会为您提供对任何物理内存位置的轻松,不受限制的访问权限。 如果我可能会问,你想要完成什么?
答案 3 :(得分:0)
我认为你可以用kernel mode driver做到这一点,但结果将是乱码,因为当你抓住它时RAM的用户部分中的内容将是操作系统分页的内容,它可能是一个应用程序的一部分或整个群体的混合。之前的SO问题也可能有所帮助:How does a Windows Kernel mode Driver, access paged memory ?
答案 4 :(得分:0)
试试这个NTMIO - 一个WINDOWS命令行来访问硬件资源http://siliconkit.com/ocart/index.php?route=product/product&keyword=ntmio&category_id=0&product_id=285