我正在尝试用Python编写一段代码来跟踪Linux中特定进程的页面污染。 我在Linux内核文档中得到了解决方案描述如下:
PTE上有点软,有助于跟踪哪些页面是一项任务 写信给。为了做这个跟踪,应该
清除任务的PTE中的软脏位。
这是通过将“4”写入的/ proc / PID / clear_refs文件来完成的 有问题的任务。
等一段时间。
从PTE读取软脏位。
这是通过从/ proc / PID / pagemap读取来完成的。第55位 64位qword是软脏的。如果设置,则从步骤1开始写入相应的PTE。
我在执行第3步时遇到问题。我在python中编写了一个始终返回零的代码。我不知道如何在每个PTE中读取第55位。在这方面,我感谢任何帮助。
这是我用Python写的:
#!/usr/bin/python
import sys
import os
import struct
def read_entry(pid, size=8):
maps_path = "/proc/{0}/pagemap".format(pid)
if not os.path.isfile(maps_path):
print "Process {0} doesn't exist.".format(pid)[0]
return
with open(maps_path, 'rb') as f:
try:
f.seek(0)
while True:
return struct.unpack('Q', f.read(size))
finally:
f.close()
if __name__ == "__main__":
pid = sys.argv[1]
print (read_entry(pid))