Как заставить AddressSanitizer не проверять сторонние библиотеки - PullRequest
0 голосов
/ 20 ноября 2018

Я работаю над проектом Cmake C ++.Помимо моего собственного исходного кода, мой проект использует много сторонних библиотек.Итак, я использую разделяемые библиотеки (с расширением .so), которые присутствуют в / usr / local / lib, а для некоторых код присутствует в / usr / local / include.(например, я использую собственную библиотеку, которая находится в /usr/local/include/eigen3/).

Как я могу убедиться, что Address Sanitizer проверяет только мой исходный код, а не какие-либо стандартные или сторонние библиотеки??

PS: В настоящее время я использую Address Sanitizer, как показано ниже:

ADD_COMPILE_OPTIONS(-O0 -g -Wall -fsanitize=address -fno-omit-frame-pointer)
SET(CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address")

И я использую gcc с версией:

gcc (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.10) 5.4.0 20160609

1 Ответ

0 голосов
/ 20 ноября 2018

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

Код в файлах заголовков и библиотеках только для заголовков, таких как Eigen, являются особым случаем, поскольку весь код Eigen вставляется напрямую.в ваши исходные файлы (через include) и, таким образом, также компилируется с -fsanitize=address.

Поскольку компилятор не делает различий между вашим кодом и включенным сторонним кодом, нет способа отключить дезинфицирующие средства для заголовка.только сторонний код.

На практике это обычно не вызывает каких-либо проблем.При использовании clang вы можете создать файл sanitize-blacklist, чтобы скрыть нежелательные ложные срабатывания (которые вы не можете исправить в восходящем потоке).К сожалению, gcc пока не поддерживает черные списки.

...