解释

解释

解释

有两种类型的地址空间:虚拟地址空间和物理地址空间。在物理模型上(通常由内核使用)内存是有限制的,每个地址都与物理地址相对应。

虚拟的供进程使用。没有限制(除了由于指针大小而导致的)。要获得更多内存,程序只需请求它(忽略可以请求的金额)。每个地址都映射到不同的物理地址。
这就是进程在从 RAM 中读取的内容方面受到限制的方式。

问题

原因是系统调用使用 ring0,但同时(至少在 Linux 上)进程状态更新为可中断,表明系统调用使用虚拟地址空间。
据我所知,CPU 环与特权指令有关,与地址空间无关(因为它与 MMU 相关)

因此如果越界读取(由于漏洞)发生在内核代码中执行系统调用期间。它可以从其他进程返回内存吗?

答案1

内核模式代码几乎可以做任何它想做的事情,包括窥探各种进程的地址空间。

是的,内核模式代码使用虚拟地址空间。内核管理物理地址空间,但没有跑进物理地址空间。

用户模式无法从 RAM 读取任何它想要的内容,因为它无法断言物理地址。

由于内核模式运行时启用了地址转换,因此内核模式代码也只能声明虚拟地址。但内核模式代码可以设置页表条目来定义虚拟地址,并将其转换为可能要访问的任何物理地址。

答案2

内核调用的系统调用使用物理地址空间,
进程调用的系统调用使用虚拟地址空间。

相关内容