Windows 7 には、ヒープのランダム化とスタックのランダム化機能があります。どうすればそれを管理できますか?アプリケーションのパフォーマンスにどのように影響しますか? それがどのように機能するかについての詳細情報はどこにありますか?
C++ プログラムの開発に Visual Studio 2008 を使用しています。その機能に対するコンパイラのオプションが見つかりません。
Windows 7 には、ヒープのランダム化とスタックのランダム化機能があります。どうすればそれを管理できますか?アプリケーションのパフォーマンスにどのように影響しますか? それがどのように機能するかについての詳細情報はどこにありますか?
C++ プログラムの開発に Visual Studio 2008 を使用しています。その機能に対するコンパイラのオプションが見つかりません。
ヒープのランダム化とスタックのランダム化は Windows の機能ですが、リンク時にプロセスごとに明示的に有効にする必要があります。Mark Russinovich は、彼の5 冊目の Windows Internalsの本で、それがどのように機能するかを説明しています。
スタックのランダム化は、最初に 64 KB または 256 KB のいずれかで区切られた 32 の可能なスタック ロケーションの 1 つを選択することで構成されます。このベース アドレスは、最初の適切な空きメモリ領域を見つけてからx番目の使用可能な領域を選択することによって選択されます。ここで、 xは、5 ビット値にシフトおよびマスクされた現在のプロセッサの TSC に基づいて再度生成されます。<...>
最後に、ASLR は、ユーザー モードで作成されたときに、最初のプロセス ヒープ (および後続のヒープ) の場所をランダム化します。RtlCreateHeap関数は、TSC から派生した別の疑似乱数を使用して、ヒープのベース アドレスを決定します。この値 (今回は 5 ビット) に 64 KB を掛けて、0 から始まる最終的なベース アドレスを生成します。さらに、攻撃が可能なヒープ アドレス範囲全体のブルート フォース スイープを実行している場合、アクセス違反を強制しようとして、ヒープ ベース アドレスの前の範囲が手動で割り当て解除されます。
確かにそれは単なるOSの機能ですか?少しも気にする必要はありません。OS はアプリケーションを移動させますが、アプリケーションが特定のメモリ アドレスにロードされていると想定しない限り (絶対に想定すべきではありません)、問題は発生しません。