【发布时间】:2017-05-18 05:16:57
【问题描述】:
我在做 Windows 系统编程,想知道我是否可以在源代码级别访问进程的页表。
这是我所知道的与虚拟内存相关的页表。
假设用户只是在 Windows 操作系统(32 位)上运行一个名为“A”进程的进程。
首先,操作系统为A进程创建并维护4GB的虚拟地址空间。
(其中2GB是内核地址空间,另外2GB是用户地址空间。
用户地址空间中的任何代码都不能直接访问内核地址空间。)
然后,操作系统在物理内存中为A进程创建并维护一个页表,将虚拟内存地址映射到物理内存地址。
这是我的问题。
OS为A进程创建页表后,该页表是否映射到A的Kernel地址空间,以便用户可以从源代码间接访问页表?
或者页表没有映射到 A 的任何虚拟地址空间,而只是驻留在物理内存中,因此用户无法访问页表?
【问题讨论】:
-
我投票决定将此问题作为题外话结束,因为它询问的是有关 Windows 的内存实现问题,而不是直接与编程相关的问题。
-
@DanielA.White 抱歉,我在编程时试图找到访问页表的方法。我刚刚编辑了帖子并添加了内容。
-
短语“源代码级别”在这种情况下没有意义。我不确定你在问什么。
-
参见 MSDN 上的 Accessing User-Space Memory。
-
应用程序无法访问内核地址空间,因此即使映射到内核空间,应用程序也无法访问。
标签: windows systems-programming virtual-address-space page-tables