我如何使用C ++从RAM运行可执行文件?
可执行文件在RAM中,我知道地址,我怎样从我的程序中调用程序?
这种事情通常来自世界的黑暗角落。 😉
与像metasploit这样的工具结合使用,可以很好地创建内存中的进程,所以有几个人试图重新实现CreateProcess()中发生的所有事情。 过了一段时间,他们发现它太复杂了(见本PDF文件的网站12f),为了得到这个工作,他们试图找到另一个解决方案,它在这里:他们调用一个普通的程序(例如一个普通的CreateProcess() notepad.exe),但他们用ThreadSuspended启动它。 然后他们在这个过程中注入了一个新的线程,这个线程将从内存中填充。 之后,他们告诉这个线程运行,所以他们从内存中获得了一个新的进程。
所以这只是一个大问题,而且这个东西一塌糊涂(通常不是正确的方法)。 如果你真的对这部分感兴趣,那么你有一个想法来搜索。
顺便说一下,不要以为你可以在C#中做到这一点。 这通常在C / C ++甚至汇编程序中完成…
你的意思是你已经将EXE文件的内容加载到RAM中,现在想要运行该可执行文件?
既然你正在谈论一个EXE,我假设你正在Windows下运行。 据我所知,Windows无法做到这一点 – 你唯一的选择是将可执行文件保存回文件并运行(例如使用CreateProcess
)。
编辑这里是你将如何运行的过程。
在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 }
在C#中:
using System; using System.Diagnostics; Process.Start("myfilename.exe");
你可以用磁盘来运行它。 你的程序不知道它是否已经加载(即在RAM中)或磁盘上。 这是由操作系统抽象出来的。
Mabye这可以帮助你: http : //www.codeproject.com/Articles/13897/Load-an-EXE-File-and-Run-It-from-Memory
PS:写一个恶意软件是不合法的(在大多数国家;))使用是!
你的意思是与另一个与你同时运行的应用程序进行通信? 这取决于您正在使用哪个操作系统。 无论如何,维基百科都有关于进程间通信的文章,它展示了一些基本的技术。