@sddvxd

Можно ли получить дескриптор файла из памяти?

Есть образ динамической библиотеки, загруженный в память. Можно ли как-то получить его дескриптор, минуя динамическую загрузку через winapi?
  • Вопрос задан
  • 58 просмотров
Решения вопроса 1
С точки зрения системы, динамическая линковка это больше процесс работы со страницами памяти, чем с файлом, он очень похож на работу с файлом подкачки. У процесса нет файловых хэндлов на динамические библиотеки, процесс работает с базовым адресом библиотеки в адресном пространстве. Хэндлы "спрятаны" внутри системы, поэтому подсунуть их в процесс динамической линковки вы не можете. Для динамической линковки недостаточно просто отобразить содержимое файла в память.
Чтобы реализовать функциональность эквивалентную динамической линковке, вам придется провести процесс динамической линковки вручную: т.е. отобразить нужную часть PE-файла на память, установить для нее необходимые аттрибуты (например пометить код как исполняемый), подгрузить необходимые DLL и заполнить таблицу импорта и вызвать DLLMain. Пример кода, который это делает можно найти, например, здесь:
https://www.codeproject.com/Tips/430684/Loading-Wi...
При этом, возможно, придется обходить какие-либо дополнительные защитные механизмы в новых версиях Windows и объяснять антивирусам что у вас нет плохих намерений.

Если хочется исключить именно операцию открытия файла, и при этом не жалко память - можно выделить память и скопировать содержимое "псевдо-DLL" в буфер памяти из .data вместо отображения файла в память. Использовать имеющееся отображение .data в памяти чтобы провести динамическую линковку непосредственно в нем не получится.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы