为 .Net 平台编写汇编代码

7
我是一名经验丰富的C#开发人员,想为了娱乐写一些汇编代码。我在想是否可以直接编写字节码并使用C#编译器、链接器等工具。我对如何进行此操作有些不确定。
或者说,可能有一个像样的汇编语言步骤调试器及其他不错的特性集成在某个环境中,我应该学习它?
我主要想编写计算代码并输出到控制台窗口。

你能稍微澄清一下你的问题吗?你是在谈论CLR IL还是汇编语言? - Brandon Moretz
当我编写汇编代码时,我想我是指的是 IL。 - Carlo V. Dango
5个回答

6

您可以编写IL代码并使用ILASM进行编译。


谢谢,那我应该从你提供的链接编译“hello world”示例,然后只需在生成Main()内容的位置插入自己的代码?我的程序有逐步执行的选项吗? - Carlo V. Dango
我不知道是否有任何IL级别的调试器...也许.NET Reflector Pro可以做到,但我不确定。 - Thomas Levesque

3
您可以使用.NET环境下的汇编语言,也就是CIL。CIL是Common Intermediate Language的缩写,具体信息可以参考维基百科

3
你可以使用MSIL编写它,然后通过MSIL汇编器(ilasm.exe)进行汇编。
至于调试器,我以前使用过DILE(DotNet IL Editor)来逐步执行IL代码,但它有点过时了。
看起来DILE仍在更新,可以查看每周构建

我应该提一下,它不是一个成熟的产品,更像是一个非常简单的调试器,您可以用它来逐步执行代码。没有太多花哨的功能。 - Khaled Nassar
1
@Carlo 看起来这个项目仍在维护中,而且项目文件中有每周构建版本,你可以去查看一下。 - Khaled Nassar

2
您不能使用C#编译器编写汇编代码。但是,您可以使用Visual Studio“CLR”项目,它将本地的C/C++与内联汇编块进行编译,然后您可以编写托管包装器,以便通过C#调用。有关更多信息,请参见CLI/C++教程
您还可以查看masm32,它可以用于编写本地的x86汇编库,然后使用p / invoke通过C#执行它们。
玩得开心!

非常感谢。我认为我更喜欢单独使用 ilasm 反汇编 C# 动态链接库,因为我大致知道会发生什么。 - Carlo V. Dango
@Carlos 不用担心,我认为我们对“汇编语言”的定义有些不同。干杯,:) - Brandon Moretz
我曾经写过一段Java->286汇编代码,那真是纯粹的恐怖。例如,有限制跳转的范围,因此编译方法只能增长到指令数量的某个特定大小。这种情况真的很糟糕,我想要避免。 - Carlo V. Dango

0

这可能对其他人有所帮助

至于编辑MSIL,我们可以通过ILDASM实用程序将程序集文件转储为IL文件,并通过ILASM实用程序重新编译为程序集文件。

这两个实用程序包含在.NET SDK中。

  • C:\ Program Files \ Microsoft Visual Studio 8 \ VC> ildasm .
  • 打开您的程序集,例如my.dll
  • 打开文件后,选择文件-> 转储。确保选中所有复选框,然后单击“确定”。 您将被提示将其保存为IL文件。我建议创建一个新目录以保存为my.IL
  • 使用您喜欢的编辑工具(我使用Visual Studio .NET 2005/2003)打开my.IL。
  • 编辑您的my.IL,然后保存它。
  • C:\ Program Files \ Microsoft Visual Studio 8 \ VC> ilasm / DLL X:\ Folder \ my.IL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接