Load an EXE file and run it from memory

I'm trying to run an executable from memory such as outlined in this article. I can run any .net/managed exes quite easily. But I cannot run executables such as notepad.exe or calc.exe. How can I get it so I can also run unmanaged exes?

21
задан Hamid Pourjam 18 June 2015 в 10:12
поделиться

2 ответа

В случае запуска исполняемых файлов .NET из памяти, библиотеки и CLR сами выполняют за вас большую работу. Для "родных" исполняемых файлов, таких как notepad.exe и calc.exe, вам придется проделать много ручной работы, чтобы добиться этого. По сути, вы должны действовать как загрузчик Windows.

Здесь, вероятно, есть много оговорок, но эта подробная статья содержит шаги, необходимые для загрузки PE wiki, msdn в память и выполнения правильного ребасинга и исправлений. Затем вы должны быть в состоянии найти точку входа (как в статье) и запустить ее.

Если вы действительно хотите запустить notepad.exe и calc.exe, проще всего, конечно, использовать Process.Start и запустить их с диска. В противном случае, если у вас есть исполняемый файл, встроенный как ресурс в ваш процесс, то следующим простым способом будет просто записать его содержимое на диск во временное место (см. Path.GetTempFileName) и затем запустить его оттуда.

25
ответ дан 29 November 2019 в 21:27
поделиться

Используйте [Process.Start ()] [1] (или другую перегрузку), и пусть операционная система выполнит загрузку в память.

-9
ответ дан 29 November 2019 в 21:27
поделиться