Просьба сообщить, как я могу загрузить 64-битные DLL из памяти в C / C ++,
я использую 64-битный режим Windows, я нашел несколько решений для
Win32, но ни один не работает правильно с 64-битной
я не хочу создавать какие-либо временные файлы, я хочу иметь
все необходимые библиотеки DLL в один файл .bin и DLL с отложенной загрузкой
в мою .exe программу
ссылки и пример источника приветствуются!
Спасибо
Вы можете загружать и выполнять код в памяти во время выполнения, без временных файлов. Строго говоря, это не DLL, а динамический код.
Вам понадобятся те же функции API, которые используются программами, которые генерируют код во время выполнения (многие языки в наши дни имеют компиляторы точно в срок).
В принципе, есть только три шага:
VirtualProtect
, В Linux mprotect
,FlushInstructionCache
,Последние две марки будут нуждаться в базовом адресе и размере вашего буфера, содержащего код.
Что сложнее, так это иметь дело с кодом, который имеет зависимости. Поскольку вы не используете загрузчик ОС, у вас нет статического разрешения импорта и исправлений. Если ваш код разработан для этой ситуации (принимает указатель на данные хост-приложения в качестве аргумента функции и проходит через него для всех внешних взаимодействий), это не должно быть проблемой. Так как вы думаете с точки зрения DLL, вероятно, так и будет.
Тем не менее, это далеко не непреодолимая проблема. Начните с создания независимой от позиции функции, хотя прежде чем переходить к исправлениям и импорту.
Других решений пока нет …