ASLR如何在Linux中随机化地址空间



我正在努力了解ASLR在Linux中的工作原理,我编写了一个简单的c程序,如下所示:

void simple(void)
{
printf("simple funcn");
}
int main(void)
{
simple();
printf("address is %p n.", (void*)&simple);
return 0;
}

在上面的代码中,我只是打印了简单函数的位置地址,在上面代码的所有执行中,我得到的简单函数的地址都是相同的,但由于ASLR,我希望在每次执行程序时都能得到一个简单函数的随机地址?我错了吗,ASLR不应该这么做?当然,当我运行"ldd app.o"时,我每次都会得到不同库的随机地址。

Fedora/CNTOS/Redhat和其他发行版默认配置为使用-no-pie(位置独立可执行文件(构建,这会阻止可执行文件本身的ASLR。

您可以使用-pie:显式启用它

gcc -pie app.c -o app && ./app

最新更新