NXビット
多くのオペレーティングシステム (OS) がNXの手段を実装もしくは保持しており、また数種のOSはNXエミュレーションを実装もしくは保持している。これはアルファベット順のOSリストである。それぞれ、技術は新しいものから古いものへの順となっている。
それぞれのOSの最初には、それぞれの技術がサポートする主要な機能が掲載されたデータ表がある。これらのOSの本質がその本質に関する情報の好都合な拡散を保証するので、これらの表は下記を要約するために提供されている。表は下記の構成となっている。
ハードウェアでサポートしているプロセッサ:(カンマで区切られたプロセッサの一覧)
エミュレーション:(なし)または(アーキテクチャ依存)または(カンマで区切られたプロセッサの一覧)
その他のサポート:(なし)または(カンマで区切られたプロセッサの一覧)
標準で搭載されているか:(はい)または(いいえ)または(この技術を搭載しているディストリビューションまたはバージョンのカンマで区切られた一覧)
リリース日:(最初にリリースされた日)
アーキテクチャ依存エミュレーションを供給するOSはハードウェアでサポートしていない全てのプロセッサ上で機能する。「その他のサポート」行はまだ明白ではない手段、たとえば明確なNXビットを搭載していないハードウェアが何らかの方法で機能を実現しているプロセッサのためにある。
この機能がハードウェアに搭載される前には、数々のオペレーティングシステムが、W^XまたはExec Shieldなど、ソフトウェアを通してこの機能を実現しようとした。これらはこの記事の最後の方で解説される。
NXビットの機能を利用可能、もしくはエミュレート可能なオペレーティングシステム (OS) は、スタックもしくはヒープメモリ領域が実行可能になる事から保護し、実行可能メモリが書き込み可能になる事から保護できる。これはスタックオーバーフロー攻撃、特にSasserやBlasterワームのようなプログラムが挿入されて実行される事から保護する。これらの攻撃はメモリのある部分(通常はスタック)が書き込み可能でありかつ実行可能である事に依存している。よって、この条件を満たしていなければ攻撃は失敗する。
レッドハットのカーネル開発者Ingo MolnarはExec Shieldという32ビットx86CPUでLinuxがNX機能を活用できるようにするLinuxカーネルパッチを提供した。後にMolnarは32ビットカーネル上でハードウェアNXをサポートするLinux NXパッチを提供した。
Exec Shieldパッチは2003年5月2日にLinux Kernel Mailing Listに提供された。このパッチは、複雑なエミュレーションを実現するために基礎的なコードに重大な改変を加えるためカーネルには取り込まれなかった。
ハードウェアでサポートしているプロセッサ: NXをサポートするLinuxがサポートする全てのプロセッサ
エミュレーション: NXの模倣は、IA-32 (x86) および互換品のコードセグメント制限を使用する
その他のサポート: なし
標準で搭載されているか: Red Hat Linux
リリース日: 2003年5月2日