問題タブ [address-sanitizer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
666 参照

c++ - Address Sanitizer スレッドの制限を超えました

-fsanitize=address オプションを指定して gcc 6.1 でコンパイルされたプログラムをプロファイリングしています。このプログラムは、スレッドごとにクリーンな終了 (pthread_exit を使用) を備えたマルチスレッド化されています。

Address Sanitizer は次のメッセージで失敗します: ==16800==AddressSanitizer: スレッド制限 (4194304 スレッド) を超えました。死んでいる。

スレッド数は意味がありません (それほど多くのスレッドを割り当てる方法はありません)。スレッドがどこでどのように作成されているかを確認するために AddressSanitizer を計測する方法はありますか?

0 投票する
1 に答える
2639 参照

c++ - -GCC-6.1 でゴールド リンカーを使用しない fsanitize

更新 (2016 年 9 月 30 日)

gcc-6.2 の Ubuntu ビルド ((Ubuntu 6.2.0-3ubuntu11~16.04) 6.2.0 20160901) では、この問題はなくなりました。


gcc-6.1[1] ((Ubuntu 6.1.1-3ubuntu11~14.04.1) 6.1.1 20160511)、GNU binutils 2.24、および GLIBCXX_3.4.22 をサポートする libstdc++ の Ubuntu ビルドを使用しています。単純な「hello world」プログラムであっても、サニタイザーを指定してもゴールド リンカーの使用は強制されません。

main.cpp

コンパイルとリンク

エラーを与える

これは、-fsanitizeオプションがゴールド リンカーを選択していないことを示しています。もちろん、簡単な修正は-fuse-ld=goldリンク中に使用することですが、gcc の以前のビルドでは、サニタイザーを使用するときにこれは必要ありませんでした。たとえば、このコードは gcc-5.3 および 4.9 (どちらも Ubuntu ビルド) で問題なく動作します。gcc-6.1 の Ubuntu 以外のビルドでこの問題を抱えている人は他にいますか? Ubuntu ビルドは壊れていますか?


[1] 以下のフラグでビルド (gcc-5.3 と gcc-4.9 は、名前とサフィックスの違いのみでビルドされました)

0 投票する
3 に答える
91229 参照

gcc - GCC で AddressSanitizer を使用するには?

私は自分のプロジェクトを構築しようとしています

しかし、次のような多くのエラーが発生します。

AddressSanitize サポートを使用してプロジェクトをコンパイルするには?

私の gcc バージョンは 4.8.4 です。

0 投票する
2 に答える
5022 参照

c++ - AddressSanitizer の出力を解釈する方法は?

AddressSanitizer が検出されたようですが、ここheap-buffer-overflowの例のように出力が明確ではありません。

オーバーフローが発生した行を取得するにはどうすればよいですか?

この結果をどのように解釈できますか?

0 投票する
3 に答える
6389 参照

ubuntu - ASAN_SYMBOLIZER_PATH がバージョン修飾バイナリで機能しなくなったのはなぜですか

Ubuntu 14.10 では、llvm-symbolizerプログラムは としてインストールされ/usr/bin/llvm-symbolizer-3.5ます。通常、アドレス サニタイザーはllvm-symbolizerinという名前のバイナリを探しますPATH。ただし、回避策として、明示的に設定することが可能でしたASAN_SYMBOLIZER_PATH。そのため、環境で設定ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.5すると、アドレスサニタイザーがインストルメント化されたプログラムが記号化されたエラーを出力できるようになります。

Ubuntu 16.04 では、llvm-symbolizerプログラムはバージョン サフィックスを付けて再度インストールされ、現在は/usr/bin/llvm-symbolizer-3.8. ただし、ASAN_SYMBOLIZER_PATH設定が機能しなくなったようです。環境で set を使用して ASAN インストルメント化プログラムを実行すると、ASANASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer-3.8がエラーを検出したときに次のエラーが生成されます。

この動作が変更された理由、または古い動作を復元する方法を知っている人はいますか? これは不当に制限されているようです。私が ASAN に指摘したシンボライザー プログラムは間違いなく既知のシンボライザーであり、最後に Ubuntu の強制バージョン タグがたまたまあるだけです。

Ubuntu はバージョン装飾のないバイナリをPATH出荷しないため、ここでは調整は役に立たないことに注意してください。llvm-symbolizer

0 投票する
1 に答える
975 参照

c++ - アドレスサニタイザーは Windows 上の bash では機能しません

現在、Windows 上の Ubuntu Bash で llvm、clang、clang-format、clang-modernize を実行しています。アドレス、メモリ、スレッド サニタイズなど、Google がリリースしたサニタイズ ツール セットを使用したいと考えています。fsanitize オプションはどれも機能していないようです。

ASAN のコード サンプルは次のとおりです。

Windows 上の bash での clang 呼び出しは次のとおりです。

結果

それを機能させる方法、またはツールチェーンの一部が欠けているかどうかについての提案が欲しいです。

Windows用のclangにはstd:outサポートなどの単純な機能がないため、UbuntuまたはDebianをデュアルブートすると思いますが、理想的にはWindowsターゲットとLinuxターゲットの両方でコンパイルできるようにしたいと思います。UbuntuはWindowsストレージスペースをマウントできないため、デュアルブートは避けたいと思いますが、Windows上のUbuntu bashにはうまく提供されているようです。

0 投票する
1 に答える
149 参照

c++ - GCC でコンテナ オーバーフロー バグ検出を使用するには?

EuroLLVM 2014 では、Kostya Serebryany がベクトル オーバーフロー検出の方法を発表しました。スライド 12 で、彼はGCC リビジョン 207517へのリンクを示していますbranches/google/gcc-4_8/libstdc++-v3/
コンテナ オーバーフロー バグ検出を使用できる GCC のバージョンを教えてください。トランクにのみある場合、Clang 3.9 リリースで利用可能ですか、それともトランクにありますか?