Загрузка DLL из места в памяти - PullRequest
10 голосов
/ 12 марта 2009

Как говорится в вопросе, я хочу загрузить DLL из места в памяти, а не из файла, аналогично LoadLibrary (Ex). Я не специалист по WinAPI, поэтому немного погуглил и нашел эту статью вместе с библиотекой MemoryModule, которая в значительной степени отвечает моим потребностям.

С другой стороны, информация там довольно старая, и библиотека некоторое время тоже не обновлялась. Поэтому я хотел знать, есть ли другие, более новые и лучшие способы сделать это. Также, если кто-то использовал библиотеку, упомянутую в статье, могли бы они дать представление о том, с чем я могу столкнуться при ее использовании?

Просто для любопытных я изучаю концепцию шифрования некоторых плагинов для приложений без сохранения расшифрованной версии на диске.

Ответы [ 2 ]

5 голосов
/ 12 марта 2009

Реализация вашего собственного загрузчика DLL может быть очень быстрой и быстрой. Читая эту статью, легко пропустить, в какие безумные крайние случаи вы можете попасть сами. Я настоятельно рекомендую против этого.
Просто для вкуса - учтите, что вы не можете использовать какие-либо обычные средства отладки для кода в DLL, которую вы загружаете, так как код, который вы выполняете, отсутствует в списке ни одной DLL, известной ОС. Другая серьезная проблема связана с DEP в Windows.

3 голосов
/ 13 марта 2009

Ну, вы можете создать RAM-диск в соответствии с этими инструкциями , затем скопировать DLL, которую вы можете в памяти, в файл и использовать LoadLibrary ().
Конечно, это не очень практично, если вы планируете развернуть его как какой-то продукт, потому что люди заметят, что устанавливается драйвер, перезагрузка после установки и новая буква диска в разделе «Мой компьютер». Кроме того, это ничего не делает для того, чтобы на самом деле скрыть библиотеку DLL, поскольку она просто сидит на RAM-диске, чтобы все могли смотреть.

Еще одна вещь, которая меня интересует: почему вы на самом деле хотите это сделать? Возможно, ваш конечный результат может быть достигнут другими способами, помимо загрузки DLL из памяти. Например, при использовании бинарного упаковщика, такого как UPX , имеющаяся на диске DLL отличается от той, которая в конечном итоге исполняется. Сразу после нормальной загрузки DLL с помощью LoadLibrary распаковщик запускает и перезаписывает память, в которую загружается DLL, с несжатым двоичным файлом (заголовок DLL гарантирует, что выделено достаточно места)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...