AddressSanitizer работает путем вставки кода во время компиляции (с флагом -fsanitize=address
).Таким образом, большая часть кода в сторонних библиотеках, на которые ссылается ваш код, не будет затронута и не проверена AddressSanitizer, так как они уже встроены в файлы общей библиотеки.Если сторонняя программа вызывает стандартную функцию (memset и т. Д.), Она все равно будет проверена.
Код в файлах заголовков и библиотеках только для заголовков, таких как Eigen, являются особым случаем, поскольку весь код Eigen вставляется напрямую.в ваши исходные файлы (через include) и, таким образом, также компилируется с -fsanitize=address
.
Поскольку компилятор не делает различий между вашим кодом и включенным сторонним кодом, нет способа отключить дезинфицирующие средства для заголовка.только сторонний код.
На практике это обычно не вызывает каких-либо проблем.При использовании clang вы можете создать файл sanitize-blacklist, чтобы скрыть нежелательные ложные срабатывания (которые вы не можете исправить в восходящем потоке).К сожалению, gcc пока не поддерживает черные списки.