__security_init_cookie
グローバル セキュリティ クッキーを初期化します。
構文
void __security_init_cookie(void);
解説
グローバル セキュリティ クッキーは、/GS (バッファーのセキュリティ チェック) を指定してコンパイルされたコードおよび例外処理を使用するコードでバッファー オーバーランから保護するために使用されます。 オーバーランから保護されている関数を開始するときにクッキーはスタックに配置され、関数が終了するときにスタックの値がグローバルなクッキーと比較されます。 違いがある場合はバッファー オーバーランが発生したことを意味し、プログラムは直ちに終了します。
通常は、CRT の初期化時に、CRT によって __security_init_cookie
が呼び出されます。 CRT の初期化をバイパスする場合 (たとえば、 /ENTRY
を使用してエントリ ポイントを指定する場合)、 __security_init_cookie
を自分で呼び出す必要があります。 __security_init_cookie
呼び出されない場合、グローバル セキュリティ Cookie は既定値に設定され、バッファー オーバーラン保護が侵害されます。 攻撃者がこの既定のクッキー値を悪用してバッファー オーバーランのチェックをすり抜けることがあるため、独自のエントリ ポイントを定義するときには、常に __security_init_cookie
を呼び出すことをお勧めします。
__security_init_cookie
の呼び出しは、オーバーランから保護されている関数に入る前に行う必要があります。そうしないと、実際には発生していないバッファー オーバーランが検出されます。 詳細については、「C Runtime Error R6035」(C ランタイム エラー R6035) をご覧ください。
例
「C Runtime Error R6035」(C ランタイム エラー R6035) の例をご覧ください。
要件
ルーチンによって返される値 | 必須ヘッダー |
---|---|
__security_init_cookie |
<process.h> |
__security_init_cookie
は、標準の C ランタイム ライブラリの Microsoft 拡張機能です。 互換性の詳細については、「互換性」を参照してください。