本オプションを指定すると,Cソース・プログラム内に次の処理を行うコードを生成します。
チェック関数内で,引数のアドレスが,間接呼び出しされる可能性のある関数アドレスのリスト(以降,関数リストと呼びます)の中に含まれるかをチェックし,含まれていない場合は,不正な間接呼び出しとみなして__control_flow_chk_fail関数を呼び出します。 |
このように,間接関数呼び出しなどプログラムの流れを変える処理について,その正しさを検証することを,Control Flow Integrity(CFI)と呼びます。
void __control_flow_integrity(void *addr);
コンパイラは,間接呼び出しされる可能性のある関数の情報をCソース・プログラムから自動で抽出します。リンカがその情報を統合して関数リストを作成します。リンカで関数リストを作成するにはリンク・オプション-CFIの指定が必要です。 |
詳細は「2.5.3 リンク・オプション」を参照してください。
__control_flow_chk_fail関数を定義する際には,次の項目に注意してください。
-S -control_flow_integrityを指定してコンパイルした場合