是否可以执行存储在变量中的机器代码

Is it possible to execute a machine code stored in a variable?

本文关键字:机器 代码 变量 执行 存储 是否      更新时间:2023-10-16

是否可以将程序(.NET 目标或纯机器代码(存储在字节数组中,然后将其直接放入内存并执行(即通过创建新进程(?程序是否必须具有内核访问权限,或者是否可以在用户模式下运行?

这可以使用 C# 和/或C++来实现吗?

我不确定机器代码,但您可以使用 .NET 代码轻松做到这一点。

有两种方法可以在运行时生成程序集。第一个是CodeDom,这是较旧的方法。第二种是通过Microsoft.CodeAnalysis NuGet包使用Roslyn。

这是一篇不错的文章,它使用两个编译器做了一个"Hello World"示例。

使用此方法创建程序集时,如果从程序启动的程序集(作为独立 exe 或作为加载的 dll(将具有与程序相同的访问权限。

编辑:如果您已经有一个已编译的.net程序集,您想要加载它存储在变量中,您只需要调用Assembly.Load(byte[])并传入字节数组

byte[] data = //...
var assembly = Assembly.Load(data);
dynamic instance = assembly.CreateInstance("YourNamespace.SomeClass"); //assuming the constructor "public SomeClass()" exists.
intance.Run(); //assuming the function "public void SomeClass.Run()" exists.

是的,你可以。 使用 CodeDom 是可能的,但这不是一个好主意。例如,用户可以构建一个会损坏硬盘驱动器的字符串。