当我使用-fsanitize=address
进行编译时,GCC / Clang隐式使用ASAN动态库,该库为ASAN提供运行时支持。如果您的构建库是由另一个应用程序动态加载的,则必须将LD_PRELOAD
设置为包含此动态库,以便它在应用程序启动时运行。
libasan.so
GCC / Clang期望使用的副本通常不明显,因为您的系统上可能有多个ASAN副本(如果您安装了多个编译器。)是否有可靠的方法来确定您需要加载的共享库的位置?
答案 0 :(得分:1)
您可以通过ldd
从库本身提取libasan路径:
$ 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