gcc - 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。
请帮助我。提前致谢。
解决方案
__asan_report_
在检查目标文件时,在符号表中为 Asan 函数(通常是 )提供参考是很好的。对于链接的可执行文件,它在大多数情况下也有效(除非您使用 GCC 和 链接-static-libasan -s
)。
推荐阅读
- python - 在 python 中制作 Plotly 图形移动响应
- mongodb - 使用 Mongodb.Driver 从 Mongodb 中检索不同的值
- java - 混合 protobuf-lite 和 protobuf-java。NoSuchMethodError
- javascript - 我该怎么做呢?我的功能似乎不起作用
- css - CSS:如何将第一个网格行设置为固定高度,然后为动态网格行数分配高度
- sql - sql oracle - 删除重复值
- javascript - 图表中使用的颜色列表
- php - WooCommerce:从数组中获取产品评论并按星号排序
- html - C# Asp.net Site.css 编译时缺少一部分
- javascript - 使用网络谷歌身份验证时如何手动设置原点