Запуск файла из оперативной памяти.
Модераторы: Duncon, Hawk, Romeo, Eugie
Здравствуйте !
Известно, что при помощи функции Win32Api ShellExecute можно например запустить какой либо файл на выполнение, либо открыть файл, если он например является текстовым.
Но как сделать, чтобы можно было запустить файл на выполнение, если он на данный момен находится не на жестком диске, а в оперативной памяти.
Заранее спасибо.
Известно, что при помощи функции Win32Api ShellExecute можно например запустить какой либо файл на выполнение, либо открыть файл, если он например является текстовым.
Но как сделать, чтобы можно было запустить файл на выполнение, если он на данный момен находится не на жестком диске, а в оперативной памяти.
Заранее спасибо.
Вячеслав Вадимович Вовк
То есть в оперативной памяти ???
любой файл при запуске находится в оперативной памяти.
любой файл при запуске находится в оперативной памяти.
В SAD - все в SAD.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Самый просто вариант: сохранить на диск в Windows Temp директорию и запустить оттуда. Так, например делает Total Commander с архивами. Вполне приемлемый подход. Чтобы не ломать голову как назвать временный файл и не "испортить" случайно жизнь другим приложениям, предлагаю воспользоваться функцией GetTempFileName.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Неа, я так уже делал, но это не совсем одходит. Теерь задача как запустить exe файл прямо из оперативной памяти, не сбрасывая его на жесткий диск
Вячеслав Вадимович Вовк
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Дело в том, что загрузку выполняемого файла в память выполняет операционная система. Помимо "тупого" копирования данных с диска в оперативку выполняется множество дополнительных действий, как-то: инициализация сегмента данных, стека, кучи, настройка дебаг регистров и ещё куча чёрт знает каких экшенов, некоторые из которых специфичны для конкретной OS. Думаю, даже если получится раздобыть соответствующую доку и ты не поленишься прочитать её и потратить пару месяцев на кодинг, всё равно получившийся продукт будет неимоверно хрупким, всё будет падать при смене OS либо каких-то иных, незадокументированных факторов.
Я бы ни за что не взялся реализовывать системные процессы!
Я бы ни за что не взялся реализовывать системные процессы!
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Вячеслав, чтобы представить объем работы, который выполняет системный загрузчик exe-файлов, советую почитать статью М.Питрека http://msdn.microsoft.com/msdnmag/issues/02/02/PE/
Но если речь идёт о DLL-файле (или запуске кода в адресном пространстве текущего процесса), то вполне можно написать самому полный аналог LoadLibrary. Можно даже автономный ELF-файл загрузить при желании... ;-)
Вячеслав
Забудь. Невозможно.
Еще никто не реализовал приложение, которое делало бы это вместо ОС.
В каких целях ты собираешься использовать возможность запуска из памяти?
Забудь. Невозможно.
Еще никто не реализовал приложение, которое делало бы это вместо ОС.
В каких целях ты собираешься использовать возможность запуска из памяти?

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