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