Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在vb.net或C#中编写汇编代码?_.net_Assembly - Fatal编程技术网

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

是否可以在vb.net或C#中编写汇编代码?,.net,assembly,.net,Assembly,我知道如何编写MSIL代码,但出于好奇,我想知道是否有编写汇编代码的变通方法。我可以想出一种方法,比如用字符串编写代码并将其传递给原生windows api,后者执行并返回结果,但不确定这是真的还是可能的 我想听听你的意见/建议。谢谢不,不能直接用C#或VB.Net编写汇编代码 最接近的方法是将汇编代码分离到一个本地DLL中,该DLL导出了C风格的函数入口点。然后PInvoke从C#/VB.Net应用程序进入这些入口点 另一种选择是使用C++/CLI,因为可以将程序集内联到C++/CLI项目中

我知道如何编写MSIL代码,但出于好奇,我想知道是否有编写汇编代码的变通方法。我可以想出一种方法,比如用字符串编写代码并将其传递给原生windows api,后者执行并返回结果,但不确定这是真的还是可能的


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

不,不能直接用C#或VB.Net编写汇编代码

最接近的方法是将汇编代码分离到一个本地DLL中,该DLL导出了C风格的函数入口点。然后PInvoke从C#/VB.Net应用程序进入这些入口点


另一种选择是使用C++/CLI,因为可以将程序集内联到C++/CLI项目中

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

您可以从C#组装它,并通过p/Invoke将生成的机器代码传递给C函数

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

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

这里的另一个(更多.NET)选项是用IL编写它,然后用ilasm或类似MonoDevelop的东西进行编译,它支持IL项目。

我理解,因此,问一个恰当的问题是,是否有可能在运行时用C/C++编译汇编代码,如果有可能的话,我们可以将汇编的代码字符串pinvoke到本机dllOf中。当然,基于IL的汇编可以合并到C#汇编中。需要手动编辑MSBuild文件。。。