AddressSanitizer: Как мы могли знать, что объектный файл / исполняемый файл в C скомпилирован с AddressSanitizer? - PullRequest
0 голосов
/ 20 января 2020

Мы планируем интегрировать инструмент AddressSanitizer в нашу инфраструктуру сборки.

Для этого я работаю над нашими файлами GNUmake, чтобы скомпилировать весь мой код C с AddressSanitizer (добавив флаг: -fsanitize = address). Теперь я хотел бы проверить, скомпилирован ли созданный объектный файл или исполняемый файл с 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.

Пожалуйста, помогите мне в этом. Заранее спасибо.

1 Ответ

1 голос
/ 20 января 2020

Подсказка для ссылки на функции Асана (обычно __asan_report_) в таблице символов подходит для проверки объектных файлов. Для связанных исполняемых файлов это также работает в большинстве случаев (кроме случаев, когда вы связываетесь с G CC и -static-libasan -s).

...