Tom*_*mer 0 memory assembly operating-system protection
总的来说,我知道一个进程无法写入具有不允许写入保护的内存(在其地址空间中)。但是,什么检查该过程是否可以做到这一点呢?是否有任何汇编指令通过操作系统?它是如何工作的?
在大多数现代CPU(Intel x86,大多数ARM版本)中,都是由CPU本身进行检查。CPU在寄存器之一中存储数据结构的地址,该数据结构指定存储器的布局(“页表”)-具体来说,哪些地址是可读的,哪些是可写的,哪些是可执行的。
当程序尝试对相应页表条目不允许的存储位置执行某项操作时,CPU会生成异常(中断),并且操作系统将获得控制权。进一步的操作取决于操作系统。
页表由操作系统维护,并且(通常)用户区代码不可见。OS中的相关部分取决于硬件。