PDA

Просмотр полной версии : Запуск файла из оперативной памяти.



Вячеслав
08.09.2005, 19:13
Здравствуйте !
Известно, что при помощи функции Win32Api ShellExecute можно например запустить какой либо файл на выполнение, либо открыть файл, если он например является текстовым.
Но как сделать, чтобы можно было запустить файл на выполнение, если он на данный момен находится не на жестком диске, а в оперативной памяти.
Заранее спасибо.

Kolinus
09.09.2005, 15:57
То есть в оперативной памяти ???
любой файл при запуске находится в оперативной памяти.

Romeo
09.09.2005, 16:34
Самый просто вариант: сохранить на диск в Windows Temp директорию и запустить оттуда. Так, например делает Total Commander с архивами. Вполне приемлемый подход. Чтобы не ломать голову как назвать временный файл и не "испортить" случайно жизнь другим приложениям, предлагаю воспользоваться функцией GetTempFileName.

Вячеслав
10.09.2005, 11:31
Неа, я так уже делал, но это не совсем одходит. Теерь задача как запустить exe файл прямо из оперативной памяти, не сбрасывая его на жесткий диск

Romeo
12.09.2005, 11:24
Дело в том, что загрузку выполняемого файла в память выполняет операционная система. Помимо "тупого" копирования данных с диска в оперативку выполняется множество дополнительных действий, как-то: инициализация сегмента данных, стека, кучи, настройка дебаг регистров и ещё куча чёрт знает каких экшенов, некоторые из которых специфичны для конкретной OS. Думаю, даже если получится раздобыть соответствующую доку и ты не поленишься прочитать её и потратить пару месяцев на кодинг, всё равно получившийся продукт будет неимоверно хрупким, всё будет падать при смене OS либо каких-то иных, незадокументированных факторов.

Я бы ни за что не взялся реализовывать системные процессы!

Eugie
13.09.2005, 01:06
Вячеслав, чтобы представить объем работы, который выполняет системный загрузчик exe-файлов, советую почитать статью М.Питрека http://msdn.microsoft.com/msdnmag/issues/02/02/PE/

bombur
20.09.2005, 01:39
Но если речь идёт о DLL-файле (или запуске кода в адресном пространстве текущего процесса), то вполне можно написать самому полный аналог LoadLibrary. Можно даже автономный ELF-файл загрузить при желании... ;-)

drmist
22.09.2005, 19:51
Вячеслав
Забудь. Невозможно.
Еще никто не реализовал приложение, которое делало бы это вместо ОС.
В каких целях ты собираешься использовать возможность запуска из памяти? ;)

dobrodij
29.09.2005, 20:16
вполне можно написать самому полный аналог LoadLibrary
Подскажи плз. где взять документацию по данному вопросу. Или может кто-то подобное уже делал и может дать пару советов? Тема довольно интересна, особенно вызов длл из памяти, а не из файла.

bombur
10.10.2005, 14:44
Подскажи плз. где взять документацию по данному вопросу.

MSDN: поиск "Pietrek loader", "MapViewOfFile", "PE relocation", "COFF format".


Или может кто-то подобное уже делал и может дать пару советов?

Я делал ("ручная" загрузка кода из COFF PE, COFF Obj, ELF), и могу помочь, если есть вопросы...

Iosif
17.11.2005, 11:28
У меня возникла примерно та же задачка, с загрузкой исполняемого кода на лету. Можешь скинуть мне на почту примерно как ты решил задачку?
Заранее спасибо!!!

Дионис
03.03.2006, 11:54
Вячеслав,
запустить exe файл прямо из оперативной памяти, не сбрасывая его на жесткий диск
А почему не воспользоваться приложением виртуальных дисков, писать прогу туда и запускать её оттуда?