Я работаю над системой времени выполнения для параллельных программ, которые могут использовать общий макет адресного пространства для нескольких процессов, потенциально распространяемых на несколько (тысяч) узлов. Много раз программное обеспечение, созданное для этой среды, запускается в системах Linux, которые по умолчанию имеют рандомизацию адресного пространства, и пользователи могут не хотеть или иметь возможность отключать ее в рамках всей системы (через sysctl -w kernel.randomize_va_space=0
и т.п.). Это накладывает некоторые ограничения на параллельные программы и может повредить производительность. Таким образом, мы хотим выяснить, как отключить его для двоичных файлов, которые мы создаем. Безопасность не является проблемой, так как это программное обеспечение всегда работает в контролируемых средах.Как отключить рандомизацию адресного пространства для двоичного кода в Linux?
Я нашел ссылки на различные флаги и переменные, как ET_EXEC
, EF_AS_NO_RANDOM
(по-видимому, никогда не сливались?) И PF_RANDOMIZE
, но я не могу найти какой-либо документ, который описывает то, что я могу сделать, чтобы установить эти флаги. Идеальный ответ подскажет мне, какой флаг компилятора/ассемблера/компоновщика отключит рандомизацию для результирующего двоичного файла и какие версии этой цепочки/ядра будут работать. Следующим лучшим будет инструмент, который делает то же самое после создания двоичного файла.
Поскольку я уверен, что кто-то предложит это, я уже знаю, что мы можем внести это изменение во время выполнения с setarch -R
, но предпочтительно записать это в исполняемый файл.
Похоже, что paxctl -rx
должен сделать трюк, но, похоже, он не применяется к текущему методу, используемому в ядрах, которые не включают патчы PaX.
Я буду исследовать и попробовать это сейчас. – Novelocrat
Кажется, что сработало. Благодаря! – Novelocrat