簡體   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