Я хочу открыть общий объект в качестве файла данных и выполнить проверку проверки на нем. Проверка - проверка подписи, и я подписываю общий объект. Если проверка выполнена успешно, я хотел бы загрузить открытый в данный момент общий объект в качестве надлежащего общего объекта.Позвоните в dlopen с файловым дескриптором?
Первый вопрос: можно ли позвонить dlopen
и загрузить общий объект в качестве файла данных во время проверки подписи, чтобы код не был выполнен? Согласно страницам man, я не верю, так как я не вижу флаг, похожий на RTLD_DATA
.
Поскольку у меня есть открытый объект как файл данных, у меня есть дескриптор. После успешной проверки я хотел бы передать дескриптор в dlopen
, чтобы динамический загрузчик правильно загрузил общий объект. Я не хочу закрывать файл, а затем повторно открывать его через dlopen
, потому что он может ввести условие гонки (где проверенный файл не является тем же файлом, который был открыт и выполнен).
Второй вопрос: как передать открытый файл dlopen
с использованием файлового дескриптора, чтобы dlopen
выполнял обычную инициализацию общего объекта?
Я не уверен, что понял ваш вопрос, даже если я ответил на некоторые вопросы. Вы действительно должны объяснить гораздо больше своих мотивов. Почему вы хотите все это сделать? О каком программном обеспечении вы думаете? Показать сценарии использования. –
Вы сделали ** не ** определите свое понятие «одобренный» или «аутентичный». У вас может быть некоторый независимый способ хранения хэша «хороших» плагинов в другом месте (например, базы данных, файла конфигурации) и проверки хэш-кода плагина перед 'dlopen'. Тем не менее, вероятно, нет возможности быть отказоустойчивым. В противном случае вы также можете генерировать C-код плагина, выполнять все проверки, которые вы хотите во время этого поколения C, затем скомпилировать его и «dlopen».FWIW [GCC MELT] (http://gcc-melt.org/) делает это. –
Измените свой вопрос, чтобы улучшить его. –