8

現在、Windows 上の Ubuntu Bash で llvm、clang、clang-format、clang-modernize を実行しています。アドレス、メモリ、スレッド サニタイズなど、Google がリリースしたサニタイズ ツール セットを使用したいと考えています。fsanitize オプションはどれも機能していないようです。

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 呼び出しは次のとおりです。

$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サポートなどの単純な機能がないため、UbuntuまたはDebianをデュアルブートすると思いますが、理想的にはWindowsターゲットとLinuxターゲットの両方でコンパイルできるようにしたいと思います。UbuntuはWindowsストレージスペースをマウントできないため、デュアルブートは避けたいと思いますが、Windows上のUbuntu bashにはうまく提供されているようです。

4

1 に答える 1

5

ソースコードをざっと見てみましょう - MemoryMappingLayout::Next - https://llvm.org/svn/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_procmaps_linux.cc - 問題は bash on /proc ファイルシステムに対する Windows 上の ubuntu サポートは不完全です。

失敗するコードは、/proc/self/maps を見ているところです (実際には、これはほぼ正しいように見えます)。

しかし、bashonwindowsonunix で /proc 内の他のもの (たとえば、networking) が完全に壊れているのを見つけたので、その部分は進行中の作業であると確信しています。

于 2016-09-09T17:56:59.063 に答える