2016-06-29 11 views
6

現在、WindowsのUbuntu Bashでllvm、clang、clang-format、clang-modernizeを実行しています。私はアドレス、メモリ、およびスレッドの消毒を含むGoogleによってリリースされたサニタイズツールのセットを使用したいと思います。 fsanitizeオプションのどれも動作していないようです。ここでアドレス墨塗りはウィンドウ上のbashでは機能しません

はASANのためのサンプルコードです:

#include <stdlib.h> 
int main() { 
    char *x = (char *)malloc(10 * sizeof(char *)); 
    free(x); 
    return x[5];// purposely accessing deallocated memory 
} 

ここでは、Windows上のbashで打ち鳴らすコールさ:

$clang++-3.5 -fsanitize=address -o1 -fno-omit-frame-pointer -g main.cpp -o main 
$./main 

結果

==70==Sanitizer CHECK failed: build/buildd/llvm-toolchain-snapshot-3.5/projects/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_linux.cc:211 ((IsOneOf(*current_, 's', 'p'))) != (0)(0,0) 

私は上の愛の提案をいただきたいですどのように働かせるか、あるいは私がツールチェーンや何かの一部を欠いている場合。

Windows用のclangにstd:outサポートのような単純な機能がないため、WindowsターゲットとLinuxターゲットの両方をコンパイルできるようにしたいので、私はUbuntuまたはDebianをデュアルブートすると思います。 UbuntuはWindowsのストレージスペースをマウントできないため、デュアルブートは避けたいのですが、Windows上のUbuntu bashにはうまくいきます。

答えて

2

ソースコードを素早く見てみる - MemoryMappingLayout :: Next - https://llvm.org/svn/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps_linux.cc - Windowsでのubuntuのbashが/ procファイルシステムのサポートが不完全であるようです。

失敗したコードは/ proc/self/mapsを見ています。実際にはほぼ正しいと思われます。

しかし、私はbashonwindowsonunixで完全に壊れた/ procの他のもの(ネットワークなど)を見つけました。その部分が作業中であることは間違いありません。

関連する問題