Mat*_*hen 16
是. 这个答案表明你可以直接执行字节数组的内容.基本上,您使用VirtualAlloc已知地址(a IntPtr)在堆上分配可执行区域.然后使用将您的字节数组复制到该地址Marshal.Copy.您将指针转换为委托GetDelegateForFunctionPointer,最后将其称为普通委托.
JSB*_*ոգչ 12
当然.
.exe文件中.Process该类来执行该文件.注意:这是假设您的字节数组是可执行代码,而不是源代码.这也假定您有一个有效的PE头或知道如何制作一个.
cka*_*ras 11
假设字节数组包含.net程序集(.exe或.dll):
Assembly assembly = AppDomain.Load(yourByteArray)
Type typeToExecute = assembly.GetType("ClassName");
Object instance = Activator.CreateInstance(typeToExecute);
Run Code Online (Sandbox Code Playgroud)
现在,如果typeToExecute实现了调用程序已知的接口,则可以将其强制转换为此接口并在其上调用方法:
((MyInterface)instance).methodToInvoke();
Run Code Online (Sandbox Code Playgroud)
如果字节数组是带有EntryPoint(Main方法)的.Net程序集,您可以这样做.大部分时间returnValue都是null.如果您想提供命令行参数,可以将它们放在commandArgs下面列出的字符串中.
var assembly = Assembly.Load(assemblyBuffer);
var entryPoint = assembly.EntryPoint;
var commandArgs = new string[0];
var returnValue = entryPoint.Invoke(null, new object[] { commandArgs });
Run Code Online (Sandbox Code Playgroud)