堆栈中是否可执行?
在看CSAPP(Computer System:A Programmer's Perspective),中译<深入理解计算机系统>
看到 虚拟存储器一章,看到一个旁注:
执行许可和缓冲区溢出,说pentium页表条目缺少一个执行许可位,用来控制一个页面的内容是否可执行.缓冲区溢出攻击利用了这个漏洞,在用户栈上直接加载和运行代码.
不过,我在3.13章中调试一个用来了解缓冲区溢出攻击的小程序时, 试图转到栈中执行自己的代码总不成功,老是出现通用保护段错误.结果用别的办法勉强达到了练习要求.
环境 系统Red Hat Enterprise Linux 4,CPU E4300
虽然后来我估计可能是因为有个地方我搞错了才会这样. 但是我还是想知道,书上说的pentium页表条目(PTE)缺少执行许可位这个说法,在现在常见的CPU和操作系统(32位系统)的组合上是否存在?
用户栈是否确实是可执行,即使是现在较新的系统中也还是存在?
或者换个说法,pentium页表条目(PTE)缺少执行许可位的问题是否已经被解决了?
(虽然我觉得好象不是这样,不然怎么还常看到"某某漏洞会导致容易受缓冲区溢出攻击"- -)