2016-01-15 3 views
7

私はCで書かれたプログラムに取り組んでいます。時々、アドレスサニタイザーを使ってビルドします。基本的にバグを捕まえるためです。プログラムは、誰がビルドしたのか、それがビルドされているのか、コンパイラなのかなどの情報で起動するとログにバナーを表示します。もしもバイナリがアドレスサニタイザを使ってビルドされていれば、 。私は__has_feature(address_sanitizer)があることを知っていますが、それはclangのためだけに機能します。gcc 4.8でビルドするときに住所サニタイザで建物を検出するにはどうすればいいですか?

#include <stdio.h> 

int main() 
{ 
#if defined(__has_feature) 
# if __has_feature(address_sanitizer) 
    printf ("We has ASAN!\n"); 
# else 
    printf ("We have has_feature, no ASAN!\n"); 
# endif 
#else 
    printf ("We got nothing!\n"); 
#endif 

    return 0; 
} 

gcc -Wall -g -fsanitize=address -o asan asan.cを構築する場合、この利回り:私は、次の簡単なプログラムを試してみましたclang -Wall -g -fsanitize=address -o asan asan.c

We got nothing! 

は私が手:

We has ASAN! 

は__has_featureするためのgcc相当するものはありますか?

私は、アドレスサニタイザーで構築されたプログラムの巨大なVSZ値のように、コンパイル時の定義や何かがあるかどうか疑問に思う方法があることを知っています。

+0

バグがあるようです:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60512 – dragosht

答えて

5

From the GCC 4.8.0 manual

__SANITIZE_ADDRESS__ 

-fsanitize=addressが使用中である場合、このマクロは、値1で定義されます。

+0

ありがとうございます! RTFMが助けてくれるもう一つの質問:)。 – fencekicker

関連する問題