一尘不染

如何在Linux中解码/ proc / pid / pagemap条目?

linux

我试图破译如何使用/ proc / pid / pagemap来获取给定页面集的物理地址。假设从/ proc / pid /
maps中获得了与堆相对应的虚拟地址afa2d000-afa42000。我的问题是如何使用此信息遍历页面地图文件并找到对应于地址afa2d000-afa42000的物理页面框架。

/ proc / pid / pagemap条目为二进制格式。有什么工具可以帮助解析此文件?


阅读 822

收藏
2020-06-02

共1个答案

一尘不染

试试这个
http://www.eqware.net/Articles/CapturingProcessMemoryUsageUnderLinux/
它可以为您解析页面地图,例如,如果您感兴趣的虚拟地址在堆中,即0x055468:= 0004c000-0005a000 rw-p 00000000
00:00 0 [heap]:86000000000FD6D6:0600000000000000
:0600000000000000
:86000000000FE921
:86000000000FE922
:0600000000000000
:86000000000FD5AD
:86000000000FD6D4
:86000000000FD5F8
:86000000000FD5FA => 9th

假设页面大小为4KB,并且(0x055468-0x4c000)mod 4K =
9,则页面的页面帧号为第9个页面帧==>:86000000000FD5FA因此物理pfn为0xFD5FA000(取最后55位和次数)页面大小)加上偏移量:(0x055468-0x4c000-9 * 4K)= 0x468 ==>物理地址为0xFD5FA000 + 0x468 = 0xFD5FA468

2020-06-02