【发布时间】:2014-09-19 00:47:58
【问题描述】:
为了理解 ASLR,我构建了这个简单的程序:
#include <stdio.h>
#include <stdlib.h>
int main() {
printf("%p\n", &system);
return 0;
}
ALSR 似乎已启用:
$ cat /proc/sys/kernel/randomize_va_space
2
我使用 GCC 编译程序:
$ gcc aslrtest.c
每次我运行这个程序时,它都会打印相同的地址 (0x400450)。
如果 glibc 在随机地址加载,我希望该程序每次打印不同的地址。这让我感到惊讶,特别是考虑到防止返回 libc 攻击被认为是 ASLR 的主要动机(尤其是 system() 调用)。
我期望system() 的地址应该是随机的,我错了吗?还是我的配置可能有问题?
【问题讨论】:
-
@HansPassant 重启后没有变化
-
编译时需要使用-pie -fPIE 让内核将镜像移动到随机地址。
-
谢谢,成功了。