1
以下のコードを検討してください。コンパイルしてアドレスサニタイザで実行すると、エラーは表示されません。しかし、境界のメモリ位置の割り当て/アクセスに誤りがあるはずです。なぜサニタイザーはそれを検出しないのでしょうか?アドレス詐称者の偽陰性ですか?
int arr[30];
int main(){
arr[40] = 34;
printf(“%d”, arr[40]);
}
ありがとう!
clang -fsanitize=address -fno-omit-frame-pointer test.c
./a.out
しかし、私はint型のARRを作る場合でも、[30]ローカル、代わりにグローバルで、それはエラーになりません。 -fno-commonを使用しても、エラーは発生しません。 –
確かに、それは答えA1です。基本的にGCCのフロントエンドは、ASanが介入する前に、明らかに悪いアクセスを早期に捨てるほど "賢い"ものです。 – yugr