是否可以在vb.net或C#中编写汇编代码?

时间:2010-11-24 22:10:40

标签: .net assembly

我知道如何编写MSIL代码,但出于好奇,我想知道是否有编写汇编代码的解决方法。我可以想到一种方法,比如在字符串中编写代码并将其传递给执行并返回结果的本机windows api,但不确定这是真实的还是可能的。

我想听听您的意见/建议。谢谢

4 个答案:

答案 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项目。