NX位(全名“No eXecute bit”,即“禁止执行位”,或“执行禁用位”),是应用在CPU中的一种安全技术。

原理

支持NX技术的系统会把内存中的区域分类为只供存储处理器指令集与只供存储数据使用的两种。任何标记了NX位的区块代表仅供存储数据使用而不是存储处理器的指令集,处理器将不会将此处的数据作为代码执行,以此这种技术可防止多数的缓存溢出式攻击(即一些恶意程序把自身的恶意指令集通过特殊手段放在其他程序的存储区并被执行,从而攻击甚至控制整台电脑系统)。

背景

类似的技术其实早已应用在SPARCDEC AlphaIBMPowerPC、甚至是英特尔IA-64架构处理器Itanium上;但“NX”这个名称最先在AMDAthlon 64Opteron等支持AMD64的处理器上使用,并成为这些技术的代名词。

x86处理器的页表索引中,NX位置于63号的位置(以0作第一位),即64位中的最后一位。如果NX位的数值是0(关闭),在页表内的指令集可正常执行;但如果是1(启动)的话则不能执行页表的指令集,并会把页表的一切皆当作数据。在格式上,页表需为PAE格式,而非x86传统的格式。

2001年,英特尔在自家的Itanium处理器加入这种技术,但未有在PentiumCeleronXeon等x86处理器上使用。在AMD把NX应用在AMD64之后,英特尔也为Prescott版本的Pentium 4处理器加入类似技术,并以“执行禁用位”(eXecute Disable,XD)的名义推出市场。在功能上,AMD的“NX”和Intel的“XD”完全相同,只是名称不同。

Microsoft在Windows XP SP2实现了资料执行防止技术。