Linux进程的跟踪页面表访问

问题描述 投票:1回答:1

我写此信的目的是跟踪一个通用Linux用户应用程序的页表访问(就每个页表访问的“索引”而言)的可行性。基本上,我正在做的是再现本研究文章(https://www.ieee-security.org/TC/SP2015/papers-archived/6949a640.pdf)中提到的漏洞利用。特别是,数据页访问必须记录下来,以供使用和推断程序秘密。

我了解Linux系统上的64位x86体系结构,页表大小为4K。而且我已经使用pinhttps://software.intel.com/en-us/articles/pin-a-dynamic-binary-instrumentation-tool)记录了所有虚拟内存访问的地址跟踪。因此,我可以使用以下转换规则简单地计算每个数据页表访问的“索引”吗?

index = address >> 15 

4KB = 2 ^ 15起。这是对的吗?预先感谢您的任何建议或评论。

而且,我想指出的一件事是,从概念上讲,我不需要每个数据页表ID的“精确”标识符,而只需一个数字(“索引”)来区分对不同数据的访问页面。与攻击相比,这在概念上应提供相同数量的信息。

linux memory-management linux-kernel intel-pin page-tables
1个回答
0
投票

好,所以您实际上并不需要“索引”,而只需一个唯一的标识符即可区分进程的虚拟地址中的不同页面。

在这种情况下,您可以只执行address >> PAGE_SHIFT。在具有4KB页面[xC0]的x86中,您可以执行以下操作:

PAGE_SHIFT is 12

然后,如果PAGE_SHIFT12对应于同一页面,则两个地址的page_id = address >> 12 将相同。

© www.soinside.com 2019 - 2024. All rights reserved.