使用 /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的主要内容,如果未能解决你的问题,请参考以下文章

认识/proc/[pid]/

认识/proc/[pid]/

了解 Linux /proc/pid/maps 或 /proc/self/maps

深度剖析Linux进程的内部机制:一探/proc/pid的奥秘

C - /proc/pid/exe 上的 Lstat

从 proc/pid/cmdline 解析命令行参数