你们知道为什么 AddressSanitizer 会使用一组完全不同的库吗?
例如,当我将输出与 string.h 中的标准 strcmp 进行比较时,我试图重新创建 strcmp,但我意识到使用 gcc 正常编译它会输出差异,但添加了 -fsanitize=address 标志给我 1, 0, -1 输出。
gcc 和 clang 的行为方式相同
顺便说一句,我在 OSX 10.11.6 上。这种行为是 MACOS 独有的还是其他系统有类似的效果?
顺便说一句,从我读到的内容来看,GNU C 库的 strcmp 输出差异,而 Apple 版本的输出只有 1、-1 和 0。所以这对我来说更令人费解,因为 MACOS 中的 gcc/clang 似乎默认情况下使用 gnu libc,并在使用 -fsanitize=address 标志时以某种方式转移到苹果的 libc 版本。
如果有人可以向我解释这一点,我将不胜感激。顺便说一句,以防万一,这是我的 gcc 配置:
➜ gcc --version
Configured with:
--prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include/c++/4.2.1
Apple LLVM version 8.0.0 (clang-800.0.38)
Target: x86_64-apple-darwin15.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin