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实作了资料执行防止技术。