众所周知,使虚拟内存的堆栈和堆区域不可执行可以防止恶意代码(如shellcode)在内存中执行(该技术称为数据执行保护)。而且,将恶意代码注入内存的最简单方法是溢出缓冲区。因此,使内存的这些区域不可执行有助于降低溢出攻击的严重性。
但是,还有许多其他技术可以用来防止此类攻击,例如地址空间随机化、指针保护、使用金丝雀等。我认为大多数系统都使用这些其他方法,而不是使堆栈/堆内存不可执行。(如果我在这里错了,请纠正我)
现在,我的问题是,是否有一些特定的操作或特殊情况需要内存的堆栈/堆部分是可执行的?