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

时间:2020-02-27 21:13:30

标签: linux operating-system aslr

我试图找出Linux中ASLR的工作方式,我编写了一个简单的c程序,如下所示:

void simple(void)
{
    printf("simple func\n");
}
int main(void)
{
    simple();

    printf("address is %p \n.", (void*)&simple);

    return 0;
}

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

1 个答案:

答案 0 :(得分:2)

Fedora / CentOS / Redhat和其他大概的发行版默认配置为使用-no-pie(位置独立的可执行文件)构建,从而防止了可执行文件本身的ASLR。

您可以使用-pie明确启用它:

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