* Bits 0-54 page frame number (PFN) if present
* Bits 0-4 swap type if swapped
* Bits 5-54 swap offset if swapped
* Bit 55 pte is soft-dirty (see Documentation/vm/soft-dirty.txt)
* Bit 56 page exclusively mapped (since 4.2)
* Bits 57-60 zero
* Bit 61 page is file-page or shared-anon (since 3.5)
* Bit 62 page swapped
* Bit 63 page present
4条答案
按热度按时间lqfhib0f1#
Linux内核文档
描述以下格式的Linux内核文档:https://github.com/torvalds/linux/blob/v4.9/Documentation/vm/pagemap.txt
在较新的Linux中,文档文件移至:https://github.com/torvalds/linux/blob/v6.2/Documentation/admin-guide/mm/pagemap.rst(感谢评论中的matvore)。
C解析器函数
GitHub upstream .
使用它的可运行程序示例:
b4qexyjb2#
我希望这个链接会有所帮助。这是一个非常简单的工具,确定您需要访问的地址也非常简单:http://fivelinesofcode.blogspot.com/2014/03/how-to-translate-virtual-to-physical.html
kqhtkvqz3#
尝试http://www.eqware.net/Articles/CapturingProcessMemoryUsageUnderLinux/它可以为您解析页面图,例如,如果您感兴趣的虚拟地址位于堆中,即0x 055468:= 0004 c 000 - 0005 a000读取-写入0000000 00:00 0 [堆]:8600000000FD6D6:0600000000000000
:06亿美元
:8600000000FE921
:8600000000FE922
:06亿美元
:86亿美元
:86亿美元
:86000000000FD5F8
:8600000000 FD 5 FA =〉第9位
假设页面大小为4KB,且(0x 055468 - 0x 4c 000)mod 4K = 9,则您的页面的页框号为第9页框==〉:8600000000 FD 5 FA因此,物理pfn为0xFD 5 FA 000(取最后55位乘以页面大小)加上偏移量:(0x 055468 - 0x 4c 000 - 9*4K)= 0x 468 ==〉物理地址为0xFD 5 FA 000 + 0x 468 = 0xFD 5 FA 468
xwbd5t1u4#
如果有人想在Rust中执行此操作,我添加了一个Rust实现,以便您可以轻松地导航
/proc/$pid/maps
和/proc/$pid/pagemap
:https://crates.io/crates/vm-info