c - 什么是地址空间布局随机化

标签 c operating-system

Possible Duplicate:
Memory randomization as application security enhancement?

嗨,

请解释一下地址空间布局随机化是什么以及它是如何实现的。该技术如何影响堆栈、堆和静态数据。我也对任何解释地址空间布局随机化的论文感兴趣。

感谢和问候,

老鼠。

最佳答案

ASLR 是一种旨在通过稍微移动段来使各种类型的缓冲区溢出更难以利用的技术。堆栈可以移动几个字节(或页面),程序的各个部分(甚至代码使用的库)可以加载到不同的地址,等等。

缓冲区溢出通常是通过欺骗 CPU 在某个地址(通常在堆栈上)运行代码来实现的。 ASLR 使地址更难预测,从而使情况变得复杂,因为它每次程序运行时都会发生变化。通常,程序不会运行任意代码,而是崩溃。这显然是一件坏事,但还不如允许某个随机 clown 控制您的服务器那么糟糕。

一种非常简单、粗暴的 ASLR 形式实际上可以在没有操作系统帮助的情况下实现,只需从堆栈指针中减去一些少量的值即可。 (这在高级语言中有点棘手,但在 C 中稍微简单一些,在 ASM 中则完全微不足道。)不过,这只能防止使用堆栈的溢出。操作系统更有帮助;如果你愿意的话,它可以改变各种各样的东西。不过,它的作用取决于您的操作系统。

关于c - 什么是地址空间布局随机化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3605222/

相关文章:

linux - 我在哪里可以找到 struct Qdisc 的定义?

c - Bochs (2.4.6)/GRUB (0.97) "Error 13 Invalid or unsupported executable format"在 C 函数调用中传递 char 字符串时

c - Minix - 系统调用没有正确调用函数?

c - 使用 IShellLink 将我的可执行文件膨胀到 20KB

c++ - 为什么 gettimeofday() 间隔偶尔为负数?

c - Arduino代码线移植到Atmel Xplained Mini以与DS3231通信

javascript - 从一个地方在操作系统上安装的所有浏览器中运行 JavaScript 脚本

android - 如何从具有 OS 11 的 Android 设备获取 mac 地址?

c - 如何使用字符数组更改函数输入

c - 如何使用 inb() 和 outb() 读写 GPIO 值