是否可以执行存储在变量中的机器代码
Is it possible to execute a machine code stored in a variable?
是否可以将程序(.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 是可能的,但这不是一个好主意。例如,用户可以构建一个会损坏硬盘驱动器的字符串。
相关文章:
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 使用不同的链接器会产生不同的机器代码吗
- objdump 不显示机器代码,但显示 ASM
- 从.o目标文件中提取函数的原始机器代码?
- 我在区分源代码、目标代码、汇编代码和机器代码时感到困惑
- 如果C++编译为机器代码,为什么我们需要安装"运行时"?
- 是否可以执行存储在变量中的机器代码
- "Double or Nothing"赌博机器代码无法超过15组合
- 如何在 c++ 中将机器代码作为函数运行
- 可以从文件执行机器代码吗?
- 如何将x64机器代码写入虚拟内存并在C++中为Windows执行
- 如何将高级/低级编程代码直接转换为机器代码
- (如何)我可以使用LLVM机器代码分析器预测代码片段的运行时间
- 如何使用llvm生成机器代码
- 使用LLVM生成纯机器代码
- 注释会被翻译成机器代码吗?C++
- 如何使用c++执行附加在可执行文件末尾的机器代码
- 如何从机器代码中恢复C++尝试/抛出/捕获块长度和地址
- 是否有编译器可以编译为机器代码的 C C++ C# 编译器
- C++ - 极其奇怪的机器代码行为