当我编译时-fsanitize=address
,GCC/Clang 隐式使用 ASAN 动态库,为 ASAN 提供运行时支持。如果您构建的库是由另一个应用程序动态加载的,则需要设置LD_PRELOAD
包含此动态库,以便它在应用程序启动时运行。
哪个副本通常并不明显libasan.so
GCC/Clang 期望使用,因为你的系统上可能有多个 ASAN 副本(如果你安装了多个编译器)。有没有可靠的方法来确定你需要加载的共享库的位置?
您可以使用-print-file-name
flag:
GCC_ASAN_PRELOAD=$(gcc -print-file-name=libasan.so)
CLANG_ASAN_PRELOAD=$(clang -print-file-name=libclang_rt.asan-x86_64.so)
您还可以通过以下方式从库本身中提取 libasan 路径ldd
:
$ echo 'void foo() {}' | gcc -x c -fPIC -shared -fsanitize=address -
$ ldd a.out | grep libasan.so | awk '{print $3}'
/usr/lib/x86_64-linux-gnu/libasan.so.4
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)