Можно ли отключить асан с помощью переменной среды?

В настоящее время я столкнулся с известной проблемой с asan (см. отчет)

==5097==Shadow memory range interleaves with an existing memory mapping. ASan cannot proceed correctly. ABORTING.
==5097==ASan shadow was supposed to be located in the [0x00007fff7000-0x10007fff7fff] range.

Можно ли использовать переменную среды, чтобы остановить использование asan для предотвращения этой ошибки?

Или, по крайней мере, не допустить, чтобы эта ошибка стала фатальной.


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


Изменить: если это полезно, это происходит с чрезвычайно простой программой: Error, Код.


person ideasman42    schedule 24.07.2017    source источник
comment
Вы пробовали проверить, какая библиотека занимает эту область памяти, требуемую Asan?   -  person yugr    schedule 24.07.2017
comment
Что странно в этой ошибке, так это то, что исполняемый файл сопоставляется с 0x00ab8a216000 вместо обычного 0x400000< /а>. Есть ли что-то особенное в том, как вы связываете datatoc? Может особенный LDFLAGS?   -  person yugr    schedule 24.07.2017
comment
Ничего странного в LDFLAGS, кроме использования ASAN.   -  person ideasman42    schedule 24.07.2017
comment
Должна быть причина, по которой ваш исполняемый файл загружается по нестандартному адресу. Возможно, это ПИРОГ?   -  person yugr    schedule 24.07.2017
comment
Этот отчет об ошибке, вероятно, более актуален, чем отчет, связанный с вашим вопросом: github.com/google/sanitizers. /issues/837 Если данный отчет верен, понижение ядро до ‹ 4.12.3 позволит избежать проблемы, пока ошибка не будет устранена.   -  person Rob W    schedule 18.08.2017


Ответы (2)


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

person yugr    schedule 24.07.2017

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

В: Я использую динамическую среду выполнения ASan, и моя программа вылетает при запуске с сообщением «Диапазон теневой памяти чередуется с существующим отображением памяти. ASan не может работать правильно».

A1: Если вы используете общий DSO ASan, попробуйте LD_PRELOAD’ировать среду выполнения Asan в вашу программу.

person Perennialista    schedule 30.10.2017