首页 > 解决方案 > AddressSanitizer:我们怎么知道 C 中的目标文件/可执行文件是用 AddressSanitizer 编译的?

问题描述

我们计划将 AddressSanitizer 工具集成到我们的构建基础架构中。

为此,我正在处理我们的 GNUmake 文件,以使用 AddressSanitizer 编译我的所有 C 代码(添加标志:-fsanitize=address)。现在我想验证创建的目标文件或可执行文件是否使用 AddressSanitizer 编译。

有什么办法可以验证相同的。

我只是想运行 nm | grep asan :-

它给出了以下未定义的参考符号。

     U __asan_init
     U __asan_option_detect_stack_use_after_return
     U __asan_register_globals
     U __asan_report_load1
     U __asan_report_load4
     U __asan_stack_malloc_1
     U __asan_unregister_globals

我不确定这是否是正确的检查方式。它显示了如上所述的未定义引用。我不确定我是否在我们的构建系统中以正确的方式集成 AddressSanitizer。只用 (-fsanitize=address) 编译代码就可以了吗?或者我仍然需要在这里做一些事情才能成功使用 AddressSanitizer。

请帮助我。提前致谢。

标签: gccgnu-makeaddress-sanitizer

解决方案


__asan_report_在检查目标文件时,在符号表中为 Asan 函数(通常是 )提供参考是很好的。对于链接的可执行文件,它在大多数情况下也有效(除非您使用 GCC 和 链接-static-libasan -s)。


推荐阅读