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實作了資料執行防止技術。