Arm*_*yan 7 c++ windows winapi
如何使用C++从RAM运行可执行文件?
可执行文件在RAM中,我知道地址,如何从我的程序调用该程序?
Oli*_*ver 10
这种事情通常来自世界的黑暗角落.;-)
结合像metasploit这样的工具,在ram中创建进程会很棒,所以有几个人试图重新实现CreateProcess()中发生的所有事情.过了一会儿,他们发现它太复杂了(请参阅PDF网站12f)以使其工作,他们试图找到另一个解决方案,它在这里:他们用一个共同的程序调用一个普通的CreateProcess()(例如notepad.exe),但他们用ThreadSuspended启动它.然后他们在这个过程中注入了一个新线程,它将从内存中填充.之后他们告诉这个线程运行,所以他们从内存中获得了一个新进程.
所以这只是全局,并且这是完全混乱(通常不是正确的方式)来做这些事情.如果您真的对这部分感兴趣,那么您有想法搜索.
顺便说一句,不要以为你可以在C#中做到这一点.这通常在C/C++甚至Assembler中完成......
你的意思是你已经将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
}
Run Code Online (Sandbox Code Playgroud)
在C#中:
using System;
using System.Diagnostics;
Process.Start("myfilename.exe");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6341 次 |
| 最近记录: |