首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >以编程方式访问.NET类型的CIL

以编程方式访问.NET类型的CIL
EN

Stack Overflow用户
提问于 2010-05-05 23:44:23
回答 2查看 335关注 0票数 3

有没有一个简单的库可以用来访问.NET类型的CIL?让我演示一下我想让虚构的CilExtractor做些什么:

代码语言:javascript
运行
复制
[Serializable]
public class Type_For_Extract_Cil_Test {

  private int _field = 3;

  public int Method(int value) {
    checked {
      return _field + value;
    }
  }

}

[Test]
public void Extract_Cil_For_Type_Test() {
  string actualCil = CilExtractor.ExtractCil(typeof(Type_For_Extract_Cil_Test));
  string expectedCil = @"
    .class public auto ansi serializable beforefieldinit Type_For_Extract_Cil_Test
      extends [mscorlib]System.Object
    {
      .method public hidebysig specialname rtspecialname instance void .ctor() cil managed
      {
        .maxstack 8
        ldarg.0 
        ldc.i4.3 
        stfld int32 Type_For_Extract_Cil_Test::_field
        ldarg.0 
        call instance void [mscorlib]System.Object::.ctor()
        ret 
      }

      .method public hidebysig instance int32 Method(int32 'value') cil managed
      {
        .maxstack 8
        ldarg.0 
        ldfld int32 Type_For_Extract_Cil_Test::_field
        ldarg.1 
        add.ovf 
        ret 
      }

      .field private int32 _field
    }";
  // indentations and code formatting issues apart, this should succeed
  Assert.AreEqual(expectedCil, actualCil);
}

我知道我可以用Mono.Cecil或Reflector做到这一点,但我也知道我必须写很多代码来实现这一点。既然Reflector已经在它的UI上做到了这一点,那么有没有一种简单的方式来访问这个功能,比如通过一个简单的方法调用?有没有其他的库更适合这个特定的场景?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-05 23:49:03

.NET框架提供了ildasm.exe工具,可以在命令行环境中使用它进行反汇编,这可能是一个很好的起点。

以下是命令行选项上的MSDN Documentation

票数 3
EN

Stack Overflow用户

发布于 2010-05-07 06:25:59

除了ildasm之外,我不知道有什么工具可以提取文本形式的反汇编。

我认为Mono.Cecil能够检索有关程序集及其类型的所有元数据,包括CIL代码。但是,程序集由对象的集合表示,而不是以文本形式表示。

也许内置的Reflection.Emit也可以提取CIL,但我不确定。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2774712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档