__security_init_cookie
グローバル セキュリティ クッキーを初期化します。
構文
void __security_init_cookie(void);
解説
グローバル セキュリティ クッキーは、/GS (バッファーのセキュリティ チェック) を指定してコンパイルされたコードおよび例外処理を使用するコードでバッファー オーバーランから保護するために使用されます。 オーバーランから保護されている関数を開始するときにクッキーはスタックに配置され、関数が終了するときにスタックの値がグローバルなクッキーと比較されます。 違いがある場合はバッファー オーバーランが発生したことを意味し、プログラムは直ちに終了します。
通常は、CRT の初期化時に、CRT によって __security_init_cookie
が呼び出されます。 CRT の初期化をバイパスする場合 (たとえば、/ENTRY
を使用してエントリ ポイントを指定する場合) は、ユーザー自身で __security_init_cookie
を呼び出す必要があります。 __security_init_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 拡張機能です。 互換性の詳細については、「互換性」を参照してください。