2012-08-04 21 views
11

Il mio intento è quello di utilizzare Clang in sostituzione di Valgrind su Windows per trovare buffer overflow, uso improprio della memoria dinamica ecc. Nei programmi C/C++ che ho scritto. Ho creato Clang con successo seguendo le istruzioni fornite here.Clang con -faddress-sanitizer su Windows

ho tentato di compilare un semplice programma C con l'opzione -faddress-disinfettante (come specificato here) ed il successivo è gettato l'errore -

gcc.exe: error: unrecognized command line option '-faddress-sanitizer' 
Using built-in specs. 
COLLECT_GCC=C:/MinGW/bin/gcc.exe 
Target: mingw32 
Configured with: ../gcc-4.7.0/configure --enable-languages=c,c++,ada,fortran,objc,obj-  c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgomp --disable-win32-registry --enable-libstdcxx-debug --disable-build-poststage1-with-cxx --enable-version-specific-runtime-libs --build=mingw32 --prefix=/mingw 
Thread model: win32 
gcc version 4.7.0 (GCC) 
clang: error: assembler (via gcc) command failed with exit code 1 (use -v to see invocation) 

Perché clang (se ho capito bene) invocare GCC ? Ovviamente GCC non supporta l'opzione -faddress-sanitizer.

Sono davvero entusiasta della possibilità di utilizzare questo come ho cercato di trovare un buon sostituto (gratuito) per Valgrind per un po '. Qualcuno può aiutarmi per favore?

risposta

6

Googling mi ha portato a this page.

citare,

AddressSanitizer è supportato su

  • Linux x86_64 (testato su Ubuntu 10.04).
  • MacOS 10.6 e 10.7 (i386/x86_64).

Supporto per Linux i386/ARM in corso (potrebbe funzionare, ma non è garantito anche).


Sul tema della sostituzione, hai guardato Dr. Memory?

+0

Grazie, ma sembra che Address Sanitizer dovrebbe funzionare su Windows in base a [questo] (http://code.google.com/p/address-sanitizer/wiki/WindowsPort). Ho provato di recente il Dr. Memory, non ha rilevato buffer overflow ma ha catturato letture non inizializzate in memoria. La singola caratteristica più importante che sto cercando è il rilevamento dell'overflow del buffer. – thegreendroid

+0

Hai seguito pienamente queste istruzioni? – oldrinb

+0

Ho tentato di fermarmi brevemente perché le istruzioni utilizzano MSVC per compilare il disinfettante degli indirizzi. Sto usando MinGW32. – thegreendroid