dlopen из памяти?

Я ищу способ загрузить сгенерированный объектный код прямо из памяти.

Я понимаю, что если я запишу его в файл, Я могу вызвать dlopen, чтобы динамически загружать его символы и связывать их. Однако это кажется немного окольным путем, учитывая, что он начинается в памяти, записывается на диск, а затем перезагружается в память с помощью dlopen. Мне интересно, есть ли способ динамически связать объектный код, существующий в памяти. Насколько я могу судить, для этого может быть несколько разных способов:

  1. Уловка, заставляющая думать, что ваша ячейка памяти - это файл, даже если он никогда не покидает память.

  2. Найдите другой системный вызов, который делает то, что я Я ищу (я не думаю, что это существует).

  3. Найдите какую-нибудь динамическую библиотеку компоновки, которая может линковать код прямо в памяти. Очевидно, это немного сложно найти в Google, поскольку "библиотека динамического связывания" предоставляет информацию о том, как динамически связывать библиотеки, не в библиотеках, которые выполняют задачу динамического связывания.

  4. Отвяжите некоторый API от компоновщика и создайте новую библиотеку из его кодовой базы. (очевидно, для меня это наименее желательный вариант.)

Итак, какие из них возможны? выполнимо? Не могли бы вы указать мне на какие-либо вещи, о существовании которых я предполагал? Есть ли другой способ, о котором я даже не подумал?

28
задан Jeremy Salwen 19 February 2011 в 21:30
поделиться