ASLR 如何在 Linux 中随机化地址 space

How ASLR randomizes address space in Linux

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

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

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

    return 0;
}

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

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

您可以通过 -pie:

明确启用它
gcc -pie app.c -o app && ./app