代码之家  ›  专栏  ›  技术社区  ›  Ali Tarhini

是否可以用vb.net或c编写汇编代码?

  •  5
  • Ali Tarhini  · 技术社区  · 14 年前

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

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

    4 回复  |  直到 14 年前
        1
  •  2
  •   anonymous coward    14 年前

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

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

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

        2
  •  3
  •   JaredPar    14 年前

    不,不能直接在C或VB.NET中编写程序集代码。

    最接近实现这一点的方法是将程序集代码分离为导出C样式函数入口点的本机dll。然后从C/VB.NET应用程序将pinvoke输入这些入口点。

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

        3
  •  1
  •   Abyx    14 年前

    您可以使用 fasm.dll 然后使用 Marshal.GetDelegateForFunctionPointer 使其可调用。

        4
  •  1
  •   Marc Gravell    14 年前

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