Как изменить права доступа к образу файла в памяти?

Рейтинг: 0Ответов: 1Опубликовано: 02.03.2011

Предположим, что есть подгружаемая библиотека libsomething.so. Это библиотека загружается процессом, который не имеет прав на запись в файл библиотеки. Во время загрузки библиотеки нужно модифицировать свой код (в памяти). Система не позволяет этого сделать прямо через вызов mprotect, но поскольку нужно менять не сам файл, а образ в памяти, должен быть способ.

Как можно обойти ограничения на права записи в файл, когда меняются права на чтение, запись, исполнение образа файла в памяти?

Ответы

▲ 1Принят

Как можно обойти ограничения на права записи в файл

Никак. Права на изменение сегмента кода не связаны с правами на запись в файлы.

Во время загрузки библиотеки нужно модифицировать свой код (в памяти)

Очень плохая идея. Требуется только в особых случаях (например, при кодогенерации на лету для всяких JIT-компиляторов виртуальных машин).

Если очень хочется, то по идее mprotect с флагами PROT_WRITE|PROT_READ|PROT_EXEC должен позволить вам это сделать. Ещё можно попытаться наоброт создать код в сегменте данных, а потом попытаться выполнить. Если вам не позволяют выполнить mprotect, то это может указывать на работу SELinux. Если SELinux в наличии, то нужно настроить его так, чтобы ваша libsomething смогла выполнять это (не помню точно, какие настройки нужны, но не сомневаюсь, что можно легко найти).