1

私のシステムは x86-64 Linux で、システムのスタックまたはデータ セグメントでコードを実行しようとしています。詳細には、最初にバイナリ命令の一部を整数配列に配置し(配列をスタックまたはデータセグメントに配置しようとしました)、次に通常の関数の戻りアドレスを配列アドレスに置き換えました。毎回、セグメンテーション違反が発生しました。

私の質問は、x86-64 には、スタックまたはデータ セグメントのいずれかで実行動作を停止するセグメンテーション保護メカニズムがありますか? 本当なら、x86-64 アーキテクチャではバッファ オーバーフローによるコード インジェクションが完全に停止するということですか?

4

1 に答える 1

1

最近のほとんどすべての汎用アーキテクチャには、特定のメモリ領域を実行できないようにする方法があります。オペレーティング システムがこれらの機能を使用するかどうかは、オペレーティング システムによって異なります。Linux は、スタック上での実行を無効にし、簡単に実行できるアーキテクチャ上のほとんどのデータを無効にします。x86_64 はその 1 つです。

于 2013-01-08T13:02:30.617 に答える