Если буфер в виртуальном адресном пространстве твоего приложения - JMP на точку входа программы. А если нет - придется через ReadProcessMemory() скопировать ее к "себе" и сделать как в первом случае.
Хай, гайз.
Возникла проблема загрузки программы (EXE и DLL) из памяти. Т.е. имеется буфер с кодом программы и необходимо его запустить без сохранения на диск. Если кто знает как это можно провернуть, pls, ответьте.
Если буфер в виртуальном адресном пространстве твоего приложения - JMP на точку входа программы. А если нет - придется через ReadProcessMemory() скопировать ее к "себе" и сделать как в первом случае.
Смотря где буфер находится.14.08.01 15:05 Автор: ggg <ggg> Статус: Elderman
> Если буфер в виртуальном адресном пространстве твоего > приложения - JMP на точку входа программы. А если нет - > придется через ReadProcessMemory() скопировать ее к "себе" > и сделать как в первом случае.
не так просто :)
1) бинарный файл не обязан совпадать с тем что будет в памяти (выравнивание секций, настройка адресов импорта) - это можно настроить вручную (как - читай формат PE файлов; в последних MSDN описан)
2a) для EXE: скорее всего у этой проги будет тот же дефолтный BaseAddress 0x400000 и её нужно будет переносить на другой адрес; а если у неё нет Relocation Table (что не редкость у exe-файлов) то обломись :))
2b) для DLL: у них почти всегда есть RelocationTable и ты сможешь загрузить и настроить её
может ещё есть проблемы - сразу не вспоминается больше :)
сразу скажу - не одну бессонную ночь проведёшь :)
может быть проще будет посмотреть как нужная тебе ОС запускает проги;
она же должна сначала отмапить файл таким какой он есть (т.е. он будет в некотором буфере - как тебе и нужно), а потом вызвать какую то функцию для настройки - вот она то тебе и нужна - научишься её вызывать - не надо будет самому настраивать исполняемый файл