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

我试图破译如何使用/ proc / pid / pagemap来获取给定页面集的物理地址。假设从/ proc / pid /

maps中获得了与堆相对应的虚拟地址afa2d000-afa42000。我的问题是如何使用此信息遍历页面地图文件并找到对应于地址afa2d000-afa42000的物理页面框架。

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

回答:

试试这个

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

以上是 如何在Linux中解码/ proc / pid / pagemap条目? 的全部内容, 来源链接: utcz.com/qa/427853.html

回到顶部