你可以使用Windows钩子或其他方法用c#进行代码注入吗?我已经看到很多关于代码注入的东西,但所有这些都是用C/C++完成的.我不知道这些语言中的任何一种,并且很难翻译.有没有人对如何做到这一点有任何想法?
可能重复:
加载EXE文件并使用C#从内存运行它
我正在使用WebClient类从Web服务器下载.exe.有没有办法可以运行.exe而不先将其保存到磁盘?
为了完整起见,让我告诉你到目前为止我所拥有的.
这是我用来开始下载的代码:
WebClient webClient = new WebClient();
webClient.DownloadDataCompleted += new DownloadDataCompletedEventHandler(webClient_DownloadDataCompleted);
webClient.DownloadDataAsync(new Uri("http://www.somewebsite.com/calc.exe"));
Run Code Online (Sandbox Code Playgroud)
在(webClient_DownloadDataCompleted)方法中,我只需从参数e中获取字节:
private void webClient_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
{
Byte[] downloadedData = e.Result;
// how to run this like a .exe?
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正在创建一个程序,看看我是否可以在C#中运行一个字节数组.
该程序应该获取一个字节数组"MyBinaryData"并加载+运行它作为一个新程序.将有一个文本框,您可以在其中输入字节以查看结果(这是一个实验;)).我试过这个:
byte[] binaryData = System.IO.File.ReadAllBytes("MyBytes.txt"); // the bytes are in a .txt file for simple tests before becoming a textbox.
Assembly LoadByte = Assembly.Load(binaryData);
MethodInfo M = LoadByte.EntryPoint;
if (M != null)
{ object o = LoadByte.CreateInstance(M.Name);
M.Invoke(o, new Object[] { null }); // this gives the error
}
else {
..... fail code here....
}
Run Code Online (Sandbox Code Playgroud)
问题是它给出了这个错误:"System.Reflection.TargetInvocationException:......必须在应用程序中创建第一个IWin32Window对象之前调用SetCompatibleTextRenderingDefault."
我的第二个测试是:
Assembly assembly = Assembly.Load(binaryData);
Type bytesExe = assembly.GetType(); // problem: the GetType(); needs to know what class to run.
Object inst …Run Code Online (Sandbox Code Playgroud) 我想为我的C#应用程序提供一个非常高分辨率的计时器.我想访问RDTSC汇编指令.有没有办法做到这一点?
编辑:我正在移植一些C++代码并尝试保留与原始相同的功能.我可能会切换到更多的.NET,但想要评估RDTSC指令,以便我可以将结果与原始结果进行比较.