Я использую средство проверки системных вызовов в сочетании с -fsanitize = address, и когда ASAN обнаруживает ошибку, он вызывает некоторые системные вызовы (ioctl (ISATTY) и т. Д.) При распечатке отчета. Средство проверки системного вызова прерывает ioctls ASAN, и отчет об ошибках не собирается должным образом.
Я хотел бы, чтобы ASAN просто прерывал работу, не печатая отчет, или, если это не удалось, определить (с помощью вызова API libasan4), что ASAN обнаружил ошибку, так что я могу помешать контроллеру syscall перехватить syscalls. .
К сожалению __asan_error_report
, __sanitizer_set_death_callback
и __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()
А программа проверки системных вызовов не обрабатывает вызовы ASAN ioctl () должным образом, поэтому она нормально завершает работу (), в то время как я надеюсь сохранить в ASAN поведение abort () ing.