2

我在大学里已经用 x86 汇编和 C 编程了一段时间了,在这一天,我无法理解一件事:谁阻止我开发一个将值写入 0x0 或其他地址的程序,通过他们的地址值,似乎对我正在运行的系统“重要”?

谁保证,首先,我能够做到这一点(我能够做到这一点,对吗?),其次,如果它实际上使用 0x0 或任何其他地址,则没有其他进程行为不端?

这是如何管理的?

4

2 回答 2

1

类 Unix 系统上的两个不同进程将没有共享内存地址空间。“用户空间”(进程可以读取和写入,完全放弃)和“内核空间”之间也存在差异,其中进程很可能既不能读取也不能写入,但可以调用函数(取决于硬件架构上的确切系统调用约定,这可以使用调用门、中断或可能的其他机制来完成)。

两个进程,A 和 B,可能会尝试同时写入其本地地址空间中的地址 0x800000,其中一个写入最终写入(物理)内存位置 0x100,另一个写入(物理)内存位置 0x3000,具体取决于具体如何内核决定将虚拟地址空间映射到物理地址空间。

然而,有些系统并非如此。

于 2013-11-12T14:41:03.667 回答
0

您不能写入受保护的地址。部分内存由内核保护,保护很容易,因为每个请求都必须经过内核。见这篇文章: http://en.wikipedia.org/wiki/Kernel_(computing)

于 2013-11-06T08:28:07.083 回答