【发布时间】:2011-12-18 18:57:33
【问题描述】:
出于某种原因,我需要将代码段的虚拟地址转换为物理地址。我做了以下实验:
我从进程A的mm_struct中的start_code和end_code得到虚拟地址,分别是可执行代码的起始地址和终止地址。
我得到进程 A 的 CR3。
我将虚拟地址逐页转换为物理地址。例如,进程A中的代码段有10个页面。我将翻译每个页面开头的10个虚拟地址。
我发现有些页面会得到页表条目 (PTE) == 0。有些页面可以成功转换为物理地址。
我尝试将 Firefox 和 Minicom 作为我的进程,它们都将进入状态。
我想我的问题是:谁能向我解释为什么 PTE == 0?这是否意味着这些页面已被交换到磁盘?如果是这种情况,我怎样才能找到这些页面?
感谢您的任何意见!
【问题讨论】:
-
这是在内核模式(如来自约定设备驱动程序)还是用户模式?
-
感谢您的提问。实际上,这既不是内核模式也不是用户模式。我正在另一台计算机上进行取证。假设我有一个内存转储4G文件,进程A的CR3,进程A的start_code和end_code(虚拟地址)。我需要找出进程A的可执行代码。
标签: memory-management linux-kernel