使用 /proc/[pid]/pagemap
Posted
技术标签:
【中文标题】使用 /proc/[pid]/pagemap【英文标题】:Using /proc/[pid]/pagemap 【发布时间】:2014-03-20 17:57:36 【问题描述】:我知道这里有一些关于页面映射文件的信息。但似乎没有人指出如何引用文件中的条目。它是否被虚拟地址偏移?我可以取一个虚拟地址 VA 并简单地 lseek 来抵消 VA 吗?还是按页面?如果是这样,我如何检索页码,因为地图只是按顺序列出它们。我正在尝试在虚拟地址和物理地址之间进行转换,并且使用虚拟地址作为偏移量总是返回相同的数字,无论我在哪里寻找。
谢谢
@leeduhem:是的,我有。这是相关部分: 3. 打开 /proc/pid/pagemap 并查找您要检查的页面。 4.从pagemap中为每个页面读取一个u64。
这对我没有帮助。它要我寻找页面,但我怎么知道页面的入口在哪里?
【问题讨论】:
你读过the document of pagemap吗? Decode /proc/pid/pagemap entry的可能重复 【参考方案1】:有一个工具可以帮助您从页面地图文件中获取所需的信息。
http://fivelinesofcode.blogspot.com/2014/03/how-to-translate-virtual-to-physical.html
【讨论】:
为什么offset
没有在这个函数中使用?我将offset
称为maps
条目中的第三个字段
是否maps
条目offset
是支持映射的特定文件/设备+inode 的偏移量?
Paschalis,我不太明白你的问题,但你指的是“如果交换比特 5-54 交换偏移量”:kernel.org/doc/Documentation/vm/pagemap.txt?
嗯...我什至不明白我前段时间问你的问题。似乎我期待 maps
条目中的 offset
用于索引页面映射文件。【参考方案2】:
您将虚拟地址除以页面大小(通常为 0x1000 或 4096)并使用它在 /proc/self/pagemap 中建立索引。分割后的部分称为 PFN,即页框号。
拉里
【讨论】:
以上是关于使用 /proc/[pid]/pagemap的主要内容,如果未能解决你的问题,请参考以下文章
了解 Linux /proc/pid/maps 或 /proc/self/maps