問題タブ [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 投票する
3 に答える
5880 参照

gcc - ASAN/UBSAN レポート出力の設定方法

単体テスト スイートを実行して、-fsanitize=address,undefinedすべてのサニタイザー エラーをreport.txtファイルに書き込みたいと考えています。デフォルトでは、すべてのサニタイザー エラーが stdout に書き込まれますが、ソフトウェアは stdout にも情報を書き込むため、エラーの検出が困難になります。私は試した:

また、テストを実行する前に C API を呼び出してみました。

ただし、どちらも機能していないようで、すべてのエラーが標準出力に書き込まれます。私は Debian テストを使用しています:

単体テストのサニタイザー エラーをどこかに保存できる別の方法はありますか?

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

c++ - AddressSanitizer GCC 4.8 での Double Free エラー

次のおもちゃのプログラムを考えてみましょう( prog.cpp):

これは正常にコンパイルされた場合 ( g++ prog.cpp -latomic)、正常に動作します。ただし、コンパイルするとg++ -fsanitize=address -fno-omit-frame-pointer prog.cpp -latomic、実行時に Double Free エラーが生成されます。上記と同様の行に基づくプログラムは、通常のコンパイルでも Double Free エラーが発生するマルチスレッド アプリケーションで使用する必要があります。Double Free の場合に一般的に参照される Rule of Three/Five やその他のさまざまなドキュメントを読みましたが、何も機能しませんでした。

noexceptまた、のデフォルトコンストラクタから指定子を削除するclass Aと、この奇妙なエラーが発生します。これについても知りたいです。

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

gcc - クラスメンバーはグローバル変数と重複しています

アプリケーションの動作不良に取り組んでいます... 最近 g++-4.1 を g++-4.8 にアップグレードしましたが、一部のクラス インスタンスのプライベート メンバーと、メイン ソースでグローバルに定義された一部の変数との間でメモリ オーバーラップが発生しています。 .

gdb で書き込みをトラップし、変数ポインタを調べると、それらが同じメモリ アドレスを共有していることがはっきりとわかります。

4.8 で導入された -fsanitize=address を有効にすると、同じことがわかります。

コードは非常に巨大で、問題を切り分けるためにコードの一部を切り取ろうとすると、重なっている領域が上に移動して消えてしまいます。

とにかく、すべてが静的に定義されており、ランタイムで定義されたインスタンスがないため、オーバーラップはコンパイラまたは gcclib の一種の間違いであると思います。または、同じアドレスに 2 つの異なるアイテムを割り当てる他の人が誰なのかわかりません。 . 問題は、この「バグ」の原因を追跡するために、他にどのような方法で調査し、より有用な情報を生成できるかということです。

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

c - gcc ASAN が実行時エラーとされるエラーで停止しない

アドレスサニタイザーが何かをキャッチしたときに中止したいと思います。デフォルトでそれを行うように設計されていると思いましたが、うまくいかないようです。効果のないものも試しASAN_OPTIONS=halt_on_error=1ました。詳細は次のとおりです。

私が取り組んでいるプロジェクトでは、アドレスサニタイザーを使用していますが、誰も気付かないうちにこの警告/エラーが数週間発生しました。

実行時エラー: null ポインターが引数 xx として渡されましたが、null になることはないと宣言されています

実行時エラーと呼ばれても、プログラムを停止したり、不正な終了コードを引き起こしたりすることはありません。これを示す簡単なプログラムを次に示します。

argc のトリックは、gcc が memcpy 呼び出しを最適化しないようにするためのものです。基本的に、私たちのコードでmemcpy(dst, NULL, 0)は、実行時エラー/警告の原因となります。

実行時エラーの後に「after」が出力されないことを期待しますが、出力され、プログラムの終了コードは 0 です。これはバグですか? 説明書には止めてくださいと書いてあります。

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

c++ - Address Sanitizer は、オプション -O を使用してメモリ リークを検出できません

Address Sanitizer(clang v3.4)を使用してメモリリークを検出すると、-O(-O0を除く)オプションを使用すると、常にリークが検出されない結果になることがわかりました。

コードは簡単です:

-O0 でコンパイルすると、

メモリを正しく検出し、

ただし、-O を追加すると、

何も検出されません!そして、私は公式文書でそれについて何も見つけません。

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

c++ - ASAN から new-delete-type-mismatch を取得する

を使用してコードをコンパイルしましたが、次の-fsanitize=addressエラーが発生しています。

コード例: