2

ネイティブ モジュールに GCC のサニタイザーを使用したいと考えています。

リンクオプションを使用します:

-static-libasan -static-libtsan -static-liblsan -static-libubsan -fsanitize=address -lasan -lubsan

ネイティブ モジュールをロードすると、エラー メッセージが出力されます。

ASan runtime does not come first in initial library list; you should either link runtime to your application or manually preload it with LD_PRELOAD.

これは、静的フラグが機能していないようです。共有オブジェクトのみにサニタイザーを使用することは可能ですか、またはサニタイザーを python3 に直接リンクする必要がありますか?

4

2 に答える 2

2

-static-libasanこの問題はおそらく、メインの実行可能ファイルによってリンクされるコンパイラに通知するフラグによって引き起こされるlibasan.aため、プラグインにリンクする必要はありません。血まみれの詳細に興味がある場合は、wikiを参照してください。一般に、大規模なアプリの 1 つのモジュールだけをサニタイズするには、それをコンパイルしてリンクし、 ed libasan.so-fsanitize=addressを使用してアプリケーションを実行する必要があります (libasanが必要なすべての glibc のビットをインターセプトできるようにするために必要です)。LD_PRELOADLD_PRELOAD

単一のモジュールをサニタイズすると、モジュールからの不正な API 呼び出しが原因であっても、メインの実行可能ファイルで発生するメモリ エラーを見逃す可能性があることに注意してください。これらを検出するには、実行可能ファイルもサニタイズする必要があります。

于 2016-10-28T12:21:07.593 に答える