macOS上的地址空间布局随机化(ALSR)

macOS上的地址空间布局随机化(ALSR),c,macos,aslr,C,Macos,Aslr,我有一个关于macOS上地址空间布局随机化(ALSR)的问题。根据Apple(2016),“如果您正在编译一个以macOS 10.7及更高版本或iOS 4.3及更高版本为目标的可执行文件,[用于ASLR的]必要标志默认启用”。本着科学精神,我决定使用以下程序在Xcode 11.3和macOS Catalina 10.15.2上对此进行测试: #include <stdio.h> int main(int argc, const char * argv[]) { int st

我有一个关于macOS上地址空间布局随机化(ALSR)的问题。根据Apple(2016),“如果您正在编译一个以macOS 10.7及更高版本或iOS 4.3及更高版本为目标的可执行文件,[用于ASLR的]必要标志默认启用”。本着科学精神,我决定使用以下程序在Xcode 11.3和macOS Catalina 10.15.2上对此进行测试:

#include <stdio.h>

int main(int argc, const char * argv[]) {
    int stack = 0;
    printf("%p\n", &stack);
    return 0;
}
我错过了什么

参考资料

苹果(2017)。避免缓冲区溢出和下溢。检索自


Arpaci Dusseau,R.H.,和Arpaci Dusseau,A.C.(2018)。完整的虚拟内存系统。在操作系统中:三个简单的部分。从

检索ASLR的明显无效性是在Xcode中运行的产物。它使用调试器或其他一些诊断功能有效地禁用了进程的ASLR


在Xcode之外运行该程序将显示您期望的ASLR行为。

您是否尝试过在不进行优化的情况下编译?根据,ASLR应包括全局、文本、堆栈和堆(尽管随机位不多)。您能检查一下libc函数是否被随机重新定位吗?文档对此很模糊,独立的审阅者抱怨ASLR实现,比如农民抱怨天气。在测试之间重新启动计算机。尝试在Xcode(或任何调试器)之外运行它。调试器或Xcode的某些其他诊断功能很有可能有效地禁用ASLR。@Kenthomass就是这样做的。您介意写一个答案让我接受吗?
0x7ffeefbff52c
Program ended with exit code: 0