Предположим мне надо из своей программы запустить другую программу.
Но сделать это надо не из файла *.ехе (с пощью shellexecute или createprocess), а предварительно распаковав её (из ресурсов) в оперативную прамять. Как можно запустить процесс из оперативной памяти?
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
Раньше интерисовал данный вопрос. Решение есть, сказать не могу где т.к. сразу штраф мне предъявят ( другой сайт ). Если программа типа консольки маленькой то еще можно. А вот если программа серьезная то варианта лучше чем сохранить в файл и загрузить нет. Тем более для чего виндовс предоставляет директорию /Temp ? Туда распаковываите и запускаите. а ожидание отработки проги в отдельный поток. потом в том же потоке по окончании отработки проги удаляите файл ехе. Все.
Администратор
Регистрация: 28.10.2006
Сообщений: 17,578
Решение есть, и местные модераторы имеют опыт изменения оперативной памяти исполняемого процесса, если изъявят желание расскажут, еще можете воспользоваться поиском, есть модификаторы вирусов и прочие программы для создания полиморфов, все в обучающих и ознакомительных целях выложено на форуме. Не применяйте для создания вирусов! только для защиты от них.
Проверка оперативной памяти
Источник: www.programmersforum.ru
Можно ли запустить приложение из оперативной памяти?
Например наше приложение должно извлекать другое приложение из ресурсов и запускать его. Но что бы не распаковывать его на диск запускать напрямую из оперативной памяти.
Отслеживать
задан 13 дек 2017 в 18:23
1,453 1 1 золотой знак 16 16 серебряных знаков 31 31 бронзовый знак
Да. Возможно, не каждое приложение, но точно можно.
13 дек 2017 в 18:31
Теоретически да, но на практике этому могут помешать некоторые вещи, например DEP.
– user239133
13 дек 2017 в 18:55
Вам нужно запустить приложение на .NET или обычное?
13 дек 2017 в 19:15
Вот тут о запуске обычного приложения.
14 дек 2017 в 0:19
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Да, можно. В свое время задавался этой целью, но затем понял, что овчинка выделки всё же не стоит и стал пользоваться виртуальным диском.
Консольное проще, насколько я понимаю. Другое дело, вы должны знать о программе хотя бы «кое-что». Вот тут успешный вариант запуска
Но вообще готовьтесь «лопатить» MSDN по таким запросам, как «PE/COFF format», «MapViewOfFile», «PE relocation» и т.п.
Отслеживать
ответ дан 13 дек 2017 в 18:32
Viktor Tomilov Viktor Tomilov
8,215 4 4 золотых знака 24 24 серебряных знака 63 63 бронзовых знака
MapViewOfFile совершенно не обязателен, а при чем тут COFF — вообще не понятно.
13 дек 2017 в 18:37
13 дек 2017 в 18:47
Его лучше вообще MZPE называть 🙂
13 дек 2017 в 18:48
Источник: ru.stackoverflow.com
КАК УСКОРИТЬ И ОСВОБОДИТЬ ОЗУ Windows 10 Pro? 100% лайфхак для оперативной памяти
Developing.ru
Здравствуйте !
Известно, что при помощи функции Win32Api ShellExecute можно например запустить какой либо файл на выполнение, либо открыть файл, если он например является текстовым.
Но как сделать, чтобы можно было запустить файл на выполнение, если он на данный момен находится не на жестком диске, а в оперативной памяти.
Заранее спасибо.
Вячеслав Вадимович Вовк
То есть в оперативной памяти .
любой файл при запуске находится в оперативной памяти.
В SAD — все в SAD.
Самый просто вариант: сохранить на диск в Windows Temp директорию и запустить оттуда. Так, например делает Total Commander с архивами. Вполне приемлемый подход. Чтобы не ломать голову как назвать временный файл и не «испортить» случайно жизнь другим приложениям, предлагаю воспользоваться функцией GetTempFileName.
Неа, я так уже делал, но это не совсем одходит. Теерь задача как запустить exe файл прямо из оперативной памяти, не сбрасывая его на жесткий диск
Вячеслав Вадимович Вовк
Дело в том, что загрузку выполняемого файла в память выполняет операционная система. Помимо «тупого» копирования данных с диска в оперативку выполняется множество дополнительных действий, как-то: инициализация сегмента данных, стека, кучи, настройка дебаг регистров и ещё куча чёрт знает каких экшенов, некоторые из которых специфичны для конкретной OS. Думаю, даже если получится раздобыть соответствующую доку и ты не поленишься прочитать её и потратить пару месяцев на кодинг, всё равно получившийся продукт будет неимоверно хрупким, всё будет падать при смене OS либо каких-то иных, незадокументированных факторов.
Я бы ни за что не взялся реализовывать системные процессы!
Вячеслав, чтобы представить объем работы, который выполняет системный загрузчик exe-файлов, советую почитать статью М.Питрека http://msdn.microsoft.com/msdnmag/issues/02/02/PE/
Но если речь идёт о DLL-файле (или запуске кода в адресном пространстве текущего процесса), то вполне можно написать самому полный аналог LoadLibrary. Можно даже автономный ELF-файл загрузить при желании. 😉
Вячеслав
Забудь. Невозможно.
Еще никто не реализовал приложение, которое делало бы это вместо ОС.
В каких целях ты собираешься использовать возможность запуска из памяти?
Источник: www.developing.ru