Как я могу выполнить исполняемый файл от RAM с помощью C++?

Я соглашаюсь - вероятно, более безопасно использовать ПОЛУЧИТЬ запрос, если Вы просто передаете данные в URL а не в теле. См. этот подобный вопрос для некоторых дополнительных представлений о целом понятии POST+GET.

7
задан Thomas Bonini 20 March 2010 в 17:16
поделиться

4 ответа

Подобные вещи обычно происходят из темных уголков мира. ; -)

В сочетании с такими инструментами, как metasploit, было бы здорово создать процесс только из оперативной памяти, поэтому пара парней попыталась заново реализовать все, что происходит в CreateProcess (). Через некоторое время они просто обнаружили, что это слишком сложно (см. этот PDF сайт 12f), чтобы заставить это работать, и они попытались найти другое решение, и вот оно: Они вызывают обычный CreateProcess () с помощью общей программы (например, notepad.exe), но запускают ее с помощью ThreadSuspended. Затем они внедрили в этот процесс новый поток, который будет заполнен из памяти. Впоследствии они приказали этому потоку работать, и таким образом они получили новый процесс, заполненный из памяти.

Так что это всего лишь общая картина, и это полный беспорядок (и обычно неправильный способ) делать это. Если вас действительно интересует эта часть, тогда у вас есть идея для поиска.

И, кстати, не думайте, что вы можете сделать это на C #. Обычно это делается на C / C ++ или даже на Ассемблере ...

10
ответ дан 6 December 2019 в 10:02
поделиться

Do you mean that you have loaded the contents of the EXE file into RAM and now want to run that executable?

Since you're talking about an EXE, I assume you're running under Windows. To my knowledge, Windows can't do this -- your only option is to save the executable back to a file and run that (using CreateProcess, for example).

Edit Here is how you would run the process.

In C++:

STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));

if(!CreateProcess("myfilename.exe", NULL, NULL, NULL, FALSE, 0, NULL, 
    NULL, &si, &pi ))
{
    // An error occurred
}

In C#:

using System;
using System.Diagnostics;

Process.Start("myfilename.exe");
6
ответ дан 6 December 2019 в 10:02
поделиться

The same way you would run it from disk. Your program doesn't know whether it's already loaded (i.e. in RAM) or on disk. This is abstracted away by the operating system.

1
ответ дан 6 December 2019 в 10:02
поделиться

You mean communicating with another application that is running at the same time as yours? That depends on which operating system you are using. In any case, Wikipedia has an article on Interprocess Communication, which shows some basic techniques.

1
ответ дан 6 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: