我不确定我问的问题是否正确,但我想知道 C 或 ASM 程序是否可以在虚拟地址 0x0 处写入?
我知道内核不允许在虚拟 0x0 处写入/读取,但我想知道是否有一些奇怪的方法可以做到这一点。可能使用我不知道的 ld 或 gcc 标志?
设置如下:
绝对不是。
您只能在小型嵌入式系统和旧操作系统架构上执行此操作,在这些架构中您的代码几乎拥有整个机器并且可以做任何它想做的事。
现代操作系统(例如 Linux)使用现代 CPU 提供的保护功能来使此类事情成为不可能。你是否是 root 并不重要,而且我认为甚至你是否是内核驱动程序也并不重要。 (比我更有知识的人可能有更多关于内核驱动程序可以做什么和不可以做什么的信息。)
如果您发现了一种写入虚拟地址零的方法,这将是一个重大安全漏洞,并且会很快得到修补。