我知道如何编写MSIL代码,但出于好奇,我想知道是否有编写汇编代码的解决方法。我可以想到一种方法,比如在字符串中编写代码并将其传递给执行并返回结果的本机windows api,但不确定这是真实的还是可能的。
我想听听您的意见/建议。谢谢
答案 0 :(得分:3)
不可能直接在C#或VB.Net中编写汇编代码。
最接近这一点的是将汇编代码分离为导出C样式函数入口点的本机DLL。然后PInvoke进入C#/ VB.Net应用程序的入口点。
另一种选择是使用C ++ / CLI,因为可以将汇编内联到C ++ / CLI项目中。
答案 1 :(得分:2)
您可以从C#汇编它,并通过P / Invoke将生成的机器代码传递给这样的C函数。
int execute(char* machine_code)
{
int(*fn)() = machine_code;
return fn();
}
您需要担心确保内存区域是可执行的,但这超出了此答案的范围。
答案 2 :(得分:1)
您可以使用fasm.dll编译代码,然后使用Marshal.GetDelegateForFunctionPointer
使其可调用。
答案 3 :(得分:1)
这里的另一个(更多.NET)选项是在IL中编写它并使用ilasm编译,或者像MonoDevelop一样编译,它支持IL项目。