2010-11-24 108 views
5

我知道如何编写MSIL代码,但出于好奇,我想知道是否有解决方法来编写汇编代码。我可以想象一种方法,就像在一个字符串中编写代码并将其传递给一个本地窗口API,该窗口执行并返回结果,但不确定这是真实还是可能。可以在vb.net或C#中编写汇编代码吗?

我想听听你的意见/ suggestions.Thanks

+2

你也用二进制代码吗? – N0Alias 2010-11-24 22:15:07

回答

2

您可以从C#中组装它,并通过P/Invoke将生成的机器代码传递到像这样的C函数。

int execute(char* machine_code) 
{ 
    int(*fn)() = machine_code; 
    return fn(); 
} 

你需要担心确保内存区域是可执行的,但这超出了这个答案的范围。

3

不,它不可能直接在C#或VB.Net编写汇编代码。

最接近你可以做到这一点是将汇编代码分为导出C风格函数入口点的本地DLL。然后将PInvoke从C#/ VB.Net应用程序中移入这些入口点。

另一种选择是使用C++/CLI,因为它可以将汇编内联到C++/CLI项目中。

+0

我明白了,所以正确的问题是,如果可以在C/C++中在运行时编译汇编代码,那么如果可能的话,我们可以将汇编代码串固定到本地dll – 2010-11-24 22:18:54

1

您可以使用fasm.dll编译代码,然后使用Marshal.GetDelegateForFunctionPointer使其可调用。

1

这里的另一个(更多.NET)选项是在IL中编写它,并使用ilasm编译,或者像支持IL项目的MonoDevelop一样编译。

+0

当然,基于IL的程序集然后可以通过[`al.exe`](http://msdn.microsoft.com/en-us/library/c405shex.aspx)合并到C#程序集中。手动编辑MSBuild文件将是必需的... – Richard 2010-12-17 10:35:19