懐かしのMS-DOSプログラミング [sc](★0)
-
- 783
- 2014/02/22(土) 22:53:33.46
-
>>771
コードとデータの分離は関係あるよ。
データ部分の実行を制限するのがNXビット
もちろんこれは比較的最近作られたもの
http://ja.wikipedia.org/wiki/NX%E3%83%93%E3%83%83%E3%83%88
NXビットは、端的に言えば「データの誤実行」を防ぐために用いられる。
そのしくみは、メモリをコード(プロセッサ命令)領域とデータ領域とに分離し、
データを配置したメモリ領域にあらかじめ特別な印(属性)を付与することで、
この領域のデータを実行しないようにする(実行を試みた際に例外=エラーを発行する)ものである。
典型的には、バッファオーバーラン攻撃(後述)等に代表される、ヒープやスタック領域等に
置かれたデータを破壊ないしは書き換えて任意のコードを挿入し実行を誘う攻撃を、
オペレーティングシステムとCPUの協調により保護するために用いられる機能である。
その機能自体は、汎用機やワークステーション等の分野では既に特に目新しいものではなかったが、
パーソナルコンピュータ用に最も普及したIA-32/AMD64アーキテクチャにおける実装は比較的最近の出来事であり、
最初に実装したAMD64系列が搭載したものを"NXbit"と呼称したため、一般にはこの名称が普及した。
ノイマン型アーキテクチャのコンピュータでは、プログラムをメモリ上にデータとして読み込み、逐次実行する。
メモリを読み取った際それがデータであるかプログラムであるのかを、単にメモリ上のデータのみをもって判断することは、
ノイマン型では本質的に不可能である。バッファオーバーラン(バッファーオーバーフロー)等と呼ばれる攻撃は、
ノイマン型コンピュータのこのような性質を悪用して行われる。
このページを共有する