是什么在操作系统中执行内存保护?

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

我知道一个进程不能写入具有不允许写入保护的内存(在其地址空间中)。但是,什么检查该过程是否可以做到这一点呢?是否有任何汇编指令通过操作系统?如何运作?

memory assembly operating-system protection
3个回答
6
投票

在大多数现代CPU(Intel x86,大多数ARM版本)中,CPU本身进行检查。 CPU在其中一个寄存器中存储一个数据结构的地址,该地址指定了内存的布局(“页表”)-具体来说,哪些地址是可读的,哪些是可写的,哪些是可执行的。

[当程序尝试对相应页表条目不允许的存储位置执行某些操作时,CPU会生成异常(中断),并且操作系统将获得控制权。进一步的操作取决于操作系统。

页表由操作系统维护,并且(通常)用户区代码不可见。操作系统中的相关部分取决于硬件。


2
投票

当硬件支持此功能时,通常在信息中描述分配的内存块的某个位指示是否可以执行该内存块。

在Intel处理器上,这称为NX(永不执行)位,而AMD将其称为XD(禁止执行)位。

NX位专门引用页表中64位条目的第63位(即最高有效位)。如果该位设置为0,则可以从该页面执行代码;如果设置为1,则无法从该页面执行代码,并且假定驻留在该页面中的任何数据。

http://en.wikipedia.org/wiki/NX_bit

该位由操作系统将可执行代码加载到内存中后设置。只能通过特权代码(例如,操作系统或驱动程序)进行设置。

另请参见:

http://en.wikipedia.org/wiki/Executable_space_protection


1
投票

页表,它们具有当前执行进程的内存空间的所有信息。当您尝试访问仅通过写入而只读的内存,或者访问不属于您的内存时,处理器将无法找到映射(或看到您无法对其进行写入),并向操作系统发出页面错误。然后,操作系统将确定它是写页面上的副本,还是访问的页面完全属于您,但尚未映射,或者您只是访问了错误的空间并进行相应的处理(通常使用段错误杀死进程)如果您访问的空间不好)。

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