繁体   English   中英

从虚拟内存地址中查找物理内存地址

[英]Find physical memory address from virtual memory address

  • 在Unix系统上,我可以找到给定虚拟内存地址的物理内存地址吗? 如果是,怎么办?

我要解决的真正问题是,如何确定操作系统是否将两个虚拟地址映射到完全相同的物理区域?

例如在下面的smaps示例中,我如何知道两个内存区域实际上在物理上是否相同?

cat /proc/<pid>/smaps

...
7f7165d42000-7f7265d42000 r--p 00000000 00:14 641846                     /run/shm/test (deleted)
Size:            4194304 kB
Rss:             4194304 kB
Pss:             2097152 kB
...
VmFlags: rd mr mw me nr sd 
7f7265d42000-7f7365d42000 rw-s 00000000 00:14 641846                     /run/shm/test
Size:            4194304 kB
Rss:             4194304 kB
Pss:             2097152 kB
...
VmFlags: rd wr sh mr mw me ms sd 
...

奖励:有没有一种方法可以简单地在C中以编程方式完成它?

我试图查找重复项,但找不到相关的重复项。

在Linux上,您可以通过解析/proc/<pid>文件mapspagemap 这里有一个小的用户空间工具可以为您完成此工作

对其进行编译(不需要特殊选项),运行page-types -p <pid> -l -N ,在第一列中找到虚拟页面地址,在第二列中读取物理地址。

将其转换为库并以编程方式使用应该很简单。 请记住,该实用程序的某些操作需要root用户访问权限(例如,读取/proc/kpageflags ),但是此任务不需要任何操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM