問題タブ [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 に答える
145 参照

c++ - 64 ビット BSD システムからコンパイルされた 32 ビット アプリの getifaddrs heap-buffer-overflow

Clang の AddressSanitizer を使用してプログラムをデバッグしているときに、奇妙な問題に直面しています。まったく同じコードが別の 64 ビット システムで機能しますが、別のシステムではヒープ バッファ オーバーフロー エラーが発生します。

両方のマシンは、同じツールチェーンなどを使用して同じオペレーティング システム (BSD 10 64 ビット) を実行します。 64 ビット システム上の 32 ビット アプリ。

問題はこの 1 つの呼び出しだけにあるため、表示するコードはあまりありません。

そして、これは ASan によってダンプされたスタック トレースです。

両方のマシンでまったく同じ CFLAGS、同じコンパイラ (Clang 3.8)、同じライブラリ バージョンを使用しています。しばらく Google と StackOverflow を調べていましたが、同じ問題を抱えている人を他に見つけることができなかったため、これは孤立したケースのようです。

誰かがこの問題についてもっと知っていることを願っています。

私を助けてくれる人に前もって感謝します。

Edit1:すべてが正常に動作するシステム(64ビットシステムの64ビットアプリ)でClang 3.8.1を使用しているのに、他のシステムにはまだ3.8.0があることに気付きました。よくわかりませんが、現時点ではコンパイラのバグだと思います。関連するすべての 32 ビット ライブラリ (ASan など) を含む 3.8.1 へのアップグレードについては、ニュースがあるときに報告します。

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

gcc - gcc でデフォルトで AddressSanitizer を有効にする

Linux ディストリビューション全体をデバッグおよびファジングできるようにするには、ASAN (AddressSanitizer、https://en.wikipedia.org/wiki/AddressSanitizer ) を gcc のデフォルト オプションとして設定します。したがって、通常、私が望むものを達成するために、通常、Linux パッケージをコンパイルする前に次の変数を設定します。

私のコードをコンパイルして実行してみてください。デフォルトをgccにしたいと思います。

それを行う 1 つのオプションは、スペック ファイルを使用することです: https://gcc.gnu.org/onlinedocs/gcc/Spec-Files.html。しかし、AddressSanitizer を使用してすべての C/C++ コードをコンパイルおよびリンクするための「すべてのルールをキャッチ」を設定する方法が見つかりませんでした。

私の質問は次のとおりです。

  • スペックファイルを使用してそれを行う方法の例はありますか?
  • それはそれを行うための最良のアプローチですか?
  • 他の代替アプローチはありますか?
0 投票する
2 に答える
1526 参照

c++ - AddressSanitizer と MemorySanitizer を実際に使用するにはどうすればよいですか?

AddressSanitizer と MemorySanitizer は非常に便利なツールですが、プログラム全体を適切にインストルメント化する必要があります。(少なくとも、AddressSanitizer の Clang バージョンについては、MemorySanitizer ドキュメントのhereと、 AddressSanitizerClangVsGCCの「グローバルにプライベート エイリアスを使用する」セクションを参照してください。)

つまり、ASan または MSan を有効にするには、すべてのライブラリ依存関係を適切なコンパイラ フラグを使用してビルドする必要があります。さまざまなサードパーティの依存関係を必要とする典型的な Linux アプリケーションの場合、これを行う実際的な方法は何ですか? Sanitizers は明らかに Google プロジェクトであり、Google コードはほとんど独自の monorepo と独自のビルド ツールを使用しているだけの印象を受けますが、これは平均的な開発者の手の届かないところにある可能性があります。多くの余分なインフラストラクチャやビルド スクリプトに投資することなく、Sanitizers を使用してライブラリをビルドする簡単な方法はありますか?