Почему почти во всех общих библиотеках /usr/lib/
установлен бит разрешений для исполняемого файла? Я не вижу ни одного варианта их использования. Некоторым удается подключить некоторую форму main
функции для печати краткой заметки об авторском праве и версии, но многие даже не делают этого, и при запуске происходит ошибка.
Итак, какой смысл устанавливать это x
? Должны ли все библиотечные упаковщики делать это? Что произойдет, если у меня dlopen()
будет общая библиотека с 0644
разрешениями?
libraries
conventions
Тадеуш А. Кадлубовский
источник
источник
/lib
и/usr/lib
являются libc и libpthread, и обе они печатают уведомление об авторских правах при выполнении.main()
символа в качестве точки входа - это не маленькая ошибка, а фундаментальный выбор дизайна. Вы пропустили мою точку зрения.Ответы:
В HP-UX разделяемые библиотеки отображаются в память с помощью mmap (), и все страницы памяти в системе имеют защитные биты, которые связаны с механизмами защиты страниц памяти в ядре и оборудовании процессора. Чтобы выполнить содержимое любой страницы памяти в системе, на этой странице должен быть установлен PROT_EXEC - полезная функция для предотвращения эксплойтов при выполнении данных.
Вызов mmap () использует биты прав доступа к файлу, который он собирается отобразить, чтобы определить защитные биты отображенных страниц памяти, которые должны его содержать: rwx -> PROT_READ | PROT_WRITE | PROT_EXEC (из sys / mman.h). таким образом, чтобы совместно используемую библиотеку можно было использовать в HP-UX, файл, содержащий разделяемую библиотеку, должен иметь разрешения на выполнение, чтобы гарантировать, что сопоставленная библиотека также имеет разрешение на выполнение.
Совместно используемая библиотека с режимом 644 в системе HP-UX вызовет дамп памяти.
источник
Неисполняемые общие объекты работают нормально, но библиотеки, помеченные как исполняемые, также могут быть запущены как автономные программы.
Нет, если вы не хотите, чтобы они испускали версию или другую информацию
нет
Вы получите новый дескриптор общего объекта (при условии, что файл доступен для чтения и т. Д.) ... бит exec не влияет на это
Относительно того, почему библиотеки, которые нельзя использовать в качестве автономных исполняемых файлов, по-прежнему имеют установленный бит exec: это, вероятно, просто артефакт используемой системы сборки или сценария ссылки.
Пример вывода, просто для справки:
источник
main()
точку входа. Libc - это выброс. Его разработчики сделали эту заметку как дополнительный функционал. Простаяchmod a+x
из любой другой библиотеки не даст вам такой функциональности`. Я все еще не вижу смысла устанавливать+x
все библиотеки..so
которые могут быть выполнены, должны быть помечены как таковые. Я исправлю свой ответ, чтобы не подразумевать, что все с установленным битом exec действительно является автономным исполняемым файлом.