【发布时间】:2013-09-25 05:30:31
【问题描述】:
众所周知,使虚拟内存的堆栈和堆区域不可执行可以防止恶意代码(如shellcode)在内存中执行(该技术称为Data Execution Prevention)。而且,将恶意代码注入内存的最简单方法是溢出缓冲区。因此,使这些内存区域不可执行有助于降低溢出攻击的严重性。
但是,还有许多其他技术可以用来防止此类攻击,例如地址空间随机化、指针保护、使用金丝雀等。我认为大多数系统都使用这些其他方法,而不是使堆栈/堆内存不可执行。(如果我在这里错了,请纠正我)
现在,我的问题是,是否有一些特定的操作或特殊情况需要内存的堆栈/堆部分可执行?
【问题讨论】:
-
如果堆是可执行的,JIT 很容易实现。不过,不确定它是如何完成的。
-
GCC's nested functions 的蹦床代码需要一个可执行堆栈 AFAIK。
标签: c security memory buffer-overflow