Linux IA-32内存模型

我正在查看一个进程的Linux IA-32内存模型,我有一个简单的问题。 图片中的灰色地带包含什么? 他们只是包括显示内存的开始和结束? 那么,文本从0x0开始,堆栈从0xFFFFFFFF开始?

重新打开:嗨,在一个操作系统课程,我参加这个问题变得有关了。 具体来说,我需要知道灰色地带包含什么。 根据目前的答案,我可以看到它包含顶部的内核代码和底部的空指针取消引用页面。 但是什么是内核代码? 我不认为它是整个操作系统本身,但它可以embedded调度程序,内核库调用或?

最好的问候,Lasse Espeholt

替代文字http://img403.imageshack.us/img403/3156/capturecj.png

Solutions Collecting From Web of "Linux IA-32内存模型"

我认为这是更准确的: 替代文字

我认为灰色地带只是代表不确定的地区。 程序文本肯定不会从0x0开始,因为大多数操作系统都使用它们作为无效页面,因此可以很容易地捕获空的解除引用。 线程堆栈也不会达到0xffffffff,因为通常最高四分之一(或一半)内核映射到它。

另请注意,由于地址空间布局随机化 ,某些部分的起始地址随机偏离图中的值。

似乎没有人提到过,可用空间中的所有内存都不一定是映射的(而且几乎从不)。

请注意,地址空间底部的零页面区域实际上并不禁止在普通的Linux发行版本中被应用程序使用。 内核用来做这件事,然后最终决定把这个决定交给LSM模块(例如SELinux,AppArmor)。 而他们没有执行相同的规则,所以事实证明,进程可以映射内存在0x0。 这是最近“内核空指针解引用”漏洞背后的漏洞的一部分。