根据维基百科,为所有 x64 二进制文件设置了 NX 位:
OS X for Intel 支持 Apple 支持的所有 CPU 上的 NX 位(从 10.4.4 - 第一个 Intel 版本 - 开始)。Mac OS X 10.4 仅支持 NX 堆栈保护。在 Mac OS X 10.5 中,所有 64 位可执行文件都有 NX 堆栈和堆栈;W^X 保护。这包括 G5 Mac 上的 x86-64(Core 2 或更高版本)和 64 位 PowerPC。
但是,如果可执行文件不是 64 位怎么办:Mach-O executable i386?
同样,对于 ASLR,维基百科说它在 10.7 及更高版本中默认启用:
在 Mac OS X Lion 10.7(2011 年 7 月发布)中,Apple 扩展了他们的实现以涵盖所有应用程序,称“地址空间布局随机化 (ASLR) 已针对所有应用程序进行了改进。它现在可用于 32 位应用程序(如堆内存保护),使 64 位和 32 位应用程序更能抵抗攻击。”
这是否意味着无法通过编译器选项退出它?如果有,我如何验证该应用程序没有?是否有任何类似于 Windows 的类比,其中一些库可能是 ASLR-ed,但其他库不是?