【发布时间】:2020-12-21 11:55:49
【问题描述】:
我想将a.exe文件下载到内存中,直接从内存中执行而不将a.exe保存在磁盘中
和 无论我多么努力,我都没有成功 我无法在流中读取和执行二进制文件
我的代码:
private void DownloadStream()
{
string uri = "http://site/a.exe";
string results = "N/A";
try
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(uri);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(resp.GetResponseStream());
results = sr.ReadToEnd();
sr.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
请帮帮我
【问题讨论】:
-
直接在内存中执行文件意味着您必须承担操作系统执行的所有任务才能执行此操作。这意味着您需要为其分配一个新进程,将可执行内存映射到该进程,进行内存修复,正确初始化执行上下文以确保安全等,然后最终正确启动该进程。这些步骤都不是微不足道的。最好将文件写入磁盘并尝试以这种方式执行它。
-
您能解释一下您为什么要这样做吗?可能有更好的方法来做你想做的事情。另外,你试过什么?您的代码会将流下载到内存中。你做了什么来执行它,那不起作用?
-
请告诉我们您已经尝试过google.com/search?q=executable+file+from+memory+c%23 的哪些选项。
-
你需要一个装载机。不能直接执行exe文件。内存段必须由加载程序分配给物理内存(需要系统凭据)。当您从文件运行时,windows 有一个自动运行的加载程序。所以你需要在执行之前运行一个加载器。