AddressSanitizer:我们如何知道 C 中的对象 file/executable 是使用 AddressSanitizer 编译的?
AddressSanitizer: How could we know that object file/executable in C is compiled with AddressSanitizer?
我们计划将 AddressSanitizer 工具集成到我们的构建基础架构中。
为此,我正在处理我们的 GNUmake 文件,以使用 AddressSanitizer(添加标志 :-fsanitize=address)编译我所有的 C 代码。现在我想验证创建的目标文件或可执行文件是否是用编译的
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。
请帮帮我。提前致谢。
在检查目标文件时,Grepping 符号 table 中的 Asan 函数(通常是 __asan_report_
)的引用很好。对于 linked executables,它在大多数情况下也有效(除非你 link 使用 GCC 和 -static-libasan -s
)。
我们计划将 AddressSanitizer 工具集成到我们的构建基础架构中。
为此,我正在处理我们的 GNUmake 文件,以使用 AddressSanitizer(添加标志 :-fsanitize=address)编译我所有的 C 代码。现在我想验证创建的目标文件或可执行文件是否是用编译的 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。
请帮帮我。提前致谢。
在检查目标文件时,Grepping 符号 table 中的 Asan 函数(通常是 __asan_report_
)的引用很好。对于 linked executables,它在大多数情况下也有效(除非你 link 使用 GCC 和 -static-libasan -s
)。