GCC/LLVMコンパイラでのsanitizeオプションの使用方法の詳細について

2588 ワード

GCC/LLVMコンパイラでのsanitizeオプションの使用方法の詳細について
コンパイラのsanitizeオプションはもともとgoogleのオープンソースC/C++ツールセットsanitizersプロジェクトから来ており、AddressSanitizer、MemorySanitizer、ThreadSanitizer、LeakSanitizer、SanitizersプロジェクトはもともとLLVMプロジェクトの一部であるが、GNUもこのシリーズツールを自社のGCCコンパイラに組み込んでいる.GCCは4.8バージョンからAddressとThread Sanitizerをサポートし、4.9バージョンからLeak SanitizerとUB Sanitizerをサポートし、これらはすべて隠れたBugを探す利器です.
GNU GCCについてsanitizeのコンパイルオプションは次のとおりです.
  • -fsanitize=address AddressSanitizerを開き、メモリエラーチェックツールを高速化します.メモリアクセスのコマンドは、境界を越えたバグと使用後に解放されたバグを検出するために使用されます.さらにASAN_を設定することでOPTIONS環境変数は、実行時の動作に影響します.ASAN_OPTIONS環境変数がhelp=1に設定されている場合(例:ASAN_OPTIONS=help=1)、使用可能なすべてのオプションがプログラムの有効化時に表示されます.ASAN_OPTIONS環境変数のプリセット値についてはwikiを参照してください.ASAN_OPTIONS環境変数は-fsanitize=threadと組み合わせて使用できません.
  • -fsanitize=kernel-addressはLinux kernelにAddressSanitizerを開きます.KernelAddressSanitizer(KASAN)は、Linuxカーネルで使用された後にリリースされ、境界を越えたバグを検索するための高速かつ包括的なソリューションを提供する動的メモリエラー検出ツールです.詳細は、KASAN wikiを参照してください.
  • -fsanitize=pointer-compareポインタ操作数の比較操作ツール(,>=).このオプションは-fsanitize=kernel-addressと共用するか、-fsanitize=addressと共用するか、-fsanitize=threadと共用できない必要があります.このチェックはデフォルトでは実行時にオフになっており、ASAN_OPTIONS環境変数をdetect_invalid_pointer_pairs=2に設定する必要があります(例:ASAN_OPTIONS=detect_invalid_pointer_pairs=2).ASAN_OPTIONS環境変数をdetect_invalid_pointer_pairs=1に設定し、両方のポインタ操作数がNULL以外の場合にのみ無効な操作があるかどうかを検出します.
  • -fsanitize=pointer-subtractポインタ操作数の比較操作ツール(-).このオプションは-fsanitize=kernel-addressと共用するか、-fsanitize=addressと共用するか、-fsanitize=threadと共用できない必要があります.このチェックはデフォルトでは実行時にオフであり、オープンにはASAN_OPTIONS環境変数をdetect_invalid_pointer_pairs=2に設定する必要があります(例:ASAN_OPTIONS=detect_invalid_pointer_pairs=2).ASAN_OPTIONS環境変数をdetect_invalid_pointer_pairs=1に設定し、両方のポインタ操作数がNULL以外の場合にのみ無効な操作があるかどうかを検出します.
  • -fsanitize=threadはThreadSanitizerを開き、迅速なデータ競合検出ツールです.メモリアクセスの命令は、データ競合を検出するバグとして使用されます.詳細はthreadsanitizer wikiを参照してください.ASAN_を設定OPTIONS環境変数は、実行時の動作に影響を与えることができます.この変数がサポートする設定値については、ThreadSanitizerFlags wikiを参照してください.このオプションは、-fsanitize=addressおよび-fsanitize=leakと共有できません.
  • -fsanitize=leakはLeakSanitizerを開き、メモリ漏洩検出ツールです.このオプションは、mallocおよび他のディスペンサをリンクまたは上書きしたライブラリの実行可能プログラムにのみ関心を持っています.詳細については、AddressSanitizerLeakSanitizer wikiを参照してください.ASAN_を設定OPTIONS環境変数は、実行時の動作に影響を与えることができます.この変数がサポートする設定値については、ThreadSanitizerFlags wikiを参照してください.このオプションは-fsanitize=threadと共有できません.sanitizerのコンパイルオプションについてはいくつかありますが、興味のあるものは以下のとおりです.https://gcc.gnu.org/onlinedocs/gcc/Instrumentation-Options.html