我的理解是典型的用户程序永远不会使用内存中的早期地址,因为这些地址通常由操作系统保留。但是,操作系统是否使用0x0
或什至将这些地址视为nullptr
?
通常(至少在Meltdown之前),内核将自己映射到每个用户空间进程虚拟地址空间中。
大多数内核将自己放在内存的上半部分。这意味着该0x0
地址在技术上是用户空间保留寻址的一部分。
无论如何,鉴于NULL
指针具有的特殊含义,该0x0
地址不应该被任何人使用。实际上,某些内核(例如正确配置的 Linux)会阻止您在地址空间的开头(包括0x0
)分配任何内容。这旨在作为一种安全措施,事实上,如果有人为0x0
地址(或以下地址)分配了一些东西,内核中的任何NULL 取消引用错误都会成为一个危险的可利用漏洞(如果有其他更新的安全措施,如SMEP和类似的,都不见了)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句