为了理解 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()
应该是随机的,我错了吗?还是我的配置可能有问题?