Possible Duplicate:
Memory randomization as application security enhancement?
嗨,
请解释一下地址空间布局随机化是什么以及它是如何实现的。该技术如何影响堆栈、堆和静态数据。我也对任何解释地址空间布局随机化的论文感兴趣。
感谢和问候,
老鼠。
最佳答案
ASLR 是一种旨在通过稍微移动段来使各种类型的缓冲区溢出更难以利用的技术。堆栈可以移动几个字节(或页面),程序的各个部分(甚至代码使用的库)可以加载到不同的地址,等等。
缓冲区溢出通常是通过欺骗 CPU 在某个地址(通常在堆栈上)运行代码来实现的。 ASLR 使地址更难预测,从而使情况变得复杂,因为它每次程序运行时都会发生变化。通常,程序不会运行任意代码,而是崩溃。这显然是一件坏事,但还不如允许某个随机 clown 控制您的服务器那么糟糕。
一种非常简单、粗暴的 ASLR 形式实际上可以在没有操作系统帮助的情况下实现,只需从堆栈指针中减去一些少量的值即可。 (这在高级语言中有点棘手,但在 C 中稍微简单一些,在 ASM 中则完全微不足道。)不过,这只能防止使用堆栈的溢出。操作系统更有帮助;如果你愿意的话,它可以改变各种各样的东西。不过,它的作用取决于您的操作系统。
关于c - 什么是地址空间布局随机化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3605222/