Страница 1 из 2

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 10 окт 2005, 14:44
bombur
dobrodij писал(а):Подскажи плз. где взять документацию по данному вопросу.
MSDN: поиск "Pietrek loader", "MapViewOfFile", "PE relocation", "COFF format".
dobrodij писал(а):Или может кто-то подобное уже делал и может дать пару советов?
Я делал ("ручная" загрузка кода из COFF PE, COFF Obj, ELF), и могу помочь, если есть вопросы...