@snovik

Как динамически загрузить DLL из памяти в QT?

Здравствуйте.

WINAPI функция LoadLibrary, QLibrary, QPluginLoader: все эти функции принимают путь к библиотеке. Есть способ загрузить динамически DLL из памяти (массив байт), если нет возможности ее сохранить на диск?

P.S. В самом лучшем случае чтобы это делалось с использованием QPluginLoader.
  • Вопрос задан
  • 448 просмотров
Пригласить эксперта
Ответы на вопрос 3
@vilgeforce
Раздолбай и программист
Есть способ: выделяете память, эмулируете работу загрузчика Windows, передаете управление. Только так делать плохо.
Ответ написан
Комментировать
Все эти функции необходимы чтобы отобразить образ файла в адресное пространство и провести динамическую линковку. Если у вас уже образ DLL находится в памяти, вам не нужно его отображать и эти функции просто не нужны. Необходимо слинковать таблицу импорта (если там что-то есть), это не сложная операция, и пометить память как исполняемую через VirtualProtect. Но место, разумеется, надо выделять так, чтобы библиотека была загружена по границе страницы, например через VirtualAlloc.

с QT это никак не связано.
Ответ написан
Комментировать
@snovik Автор вопроса
Было найдено решение данного вопроса: https://github.com/fancycode/MemoryModule
Есть только один нюанс, библиотека не загружается если имеются чисто виртуальные функции.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы