x86 上的 Solaris 10 在 32 位和 64 位模式下支持 no execute (NX) 位。使用 NX 位,可通过在 mmap() 函数等各种内存系统调用中不使用 PROT_EXEC 来实现必需的保护。 以前在 x86 上,所有隐含映射的内存都设置 PROT_EXEC。由于 Solaris 支持 NX 位,增强了病毒保护。
在支持 NX 的硬件上,只要未指定 PROT_EXEC,Solaris OS 就会缺省使用 NX 位。不过,堆栈段在缺省情况下使用 PROT_EXEC 而非 NX 位。可通过执行下列操作之一,更改堆栈段的缺省设置:
在 /etc/system 中设置 no_exec_userstack,以便在所有应用程序堆栈中全局设置 no exec。
将单个应用程序链接到 /usr/lib/ld/map.noexstk 映射文件。
系统管理员可通过使用 eeprom 命令将 enforce-prot-exec 设置为 "off" 来禁用所有 NX 位。对于包含缺少 PROT_EXEC 的传统应用程序的任何系统,都提供此变量作为转换解决方法。