2016-01-15 5 views
7

Pracuję nad programem napisanym w języku C, który czasami buduję z dezynfekcją adresów, głównie po to, aby łapać błędy. Program wypisuje baner w dziennikach, gdy zaczyna się od informacji takich jak: kto go zbudował, oddziału, w którym został zbudowany, kompilator itp. Myślałem, że byłoby miło również przeliterować, jeśli binarny został zbudowany przy użyciu sanityzatora adresów . Wiem, że istnieje __has_feature (address_sanitizer), ale to działa tylko dla clanga. Próbowałem następujący prosty program:Jak wykryć, czy budynek z odkażaczem adresów przy budowaniu z 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; 
} 

Przy budowie z gcc -Wall -g -fsanitize=address -o asan asan.c, Daje:

We got nothing! 

Z clang -Wall -g -fsanitize=address -o asan asan.c uzyskać:

We has ASAN! 

Czy istnieje odpowiednik __has_feature gcc?

Wiem, że istnieją sposoby sprawdzenia, na przykład ogromna wartość VSZ dla programów zbudowanych za pomocą dezynfekcji adresów, tylko zastanawia się, czy istnieje definicja czasu kompilacji lub coś podobnego.

+0

Wygląda na to błąd: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60512 – dragosht

Odpowiedz

Powiązane problemy