我正在结合使用系统调用检查器-fsanitize=address
当 ASAN 发现错误时,它会调用一些系统调用(ioctl(ISATTY)
等)打印报告时。系统调用检查器中断了 ASAN 的 ioctl,并且未正确收集错误报告。
我希望 ASAN 能够简单地中止而不打印报告,或者失败,这是一种确定(可能使用 libasan4 API 调用)ASAN 发现错误的方法,这样我就可以阻止系统调用检查器拦截系统调用。
很遗憾__asan_error_report
, __sanitizer_set_death_callback
and __asan_set_error_report_callback
来自 libasan4 的所有操作均在 ASAN 收集报告后开始:
0 __asan_error_report()
1 syscall_checker()
2 ioctl(ISATTY)
3 asan::PrintReport()
4 app_code_that_crashes()
并且系统调用检查器不处理 ASANioctl()
正确调用,因此它正常退出(),而我希望保持 ASAN 的行为abort()
ing.
您应该能够在通过重写打印报告之前进行拦截__asan_on_error
(声明于asan_interface.h
,默认为空):
// User may provide function that would be called right when ASan detects
// an error. This can be used to notice cases when ASan detects an error, but
// the program crashes before ASan report is printed.
void __asan_on_error();
请注意,由于奇怪的 Asan 回调接口,您最好在主二进制文件中实现此回调(共享库中的定义可能无法拦截来自libasan.a
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)