• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#程序集系列02,使用记事本查看可执行程序集的IL代码

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

继续上一篇"C#程序集系列01,用记事本编写C#,IL代码,用DOS命令编译程序集,运行程序",在F盘的as文件夹中已经有了若干程序集。本篇体验使用记事本查看可执行程序集的IL代码。

 

→打开"VS2012开发人员命令提示",输入如下命令,并按回车

在as文件夹中多了1.txt和1.res这2个文件
→输入如下命令打开1.txt

 

//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.0.30319.18020
// Metadata version: v4.0.30319
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 4:0:0:0
}
.assembly extern MyClass
{
  .ver 0:0:0:0
}
.assembly MainClass
{
  .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) 
  .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78   // ....T..WrapNonEx
                                                                                                             63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 )       // ceptionThrows.
  .hash algorithm 0x00008004
  .ver 0:0:0:0
}
.module MainClass.exe
// MVID: {73BA142E-F5C9-4C2E-8963-DB7213CB466A}
.imagebase 0x00400000
.file alignment 0x00000200
.stackreserve 0x00100000
.subsystem 0x0003       // WINDOWS_CUI
.corflags 0x00000001    //  ILONLY
// Image base: 0x00560000
// =============== CLASS MEMBERS DECLARATION ===================
.class private auto ansi beforefieldinit MainClass
       extends [mscorlib]System.Object
{
  .method private hidebysig static void  Main() cil managed
  {
    .entrypoint
    // 代码大小       8 (0x8)
    .maxstack  8
    IL_0000:  nop
    IL_0001:  call       void [MyClass]MyClass::PrintSth()
    IL_0006:  nop
    IL_0007:  ret
  } // end of method MainClass::Main
  .method public hidebysig specialname rtspecialname 
          instance void  .ctor() cil managed
  {
    // 代码大小       7 (0x7)
    .maxstack  8
    IL_0000:  ldarg.0
    IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
    IL_0006:  ret
  } // end of method MainClass::.ctor
} // end of class MainClass
// =============================================================
// *********** 反汇编完成 ***********************
// 警告: 创建了 Win32 资源文件 1.res

以上,

○ .assembly extern mscorlib,表示在CLR运行时需要引用mscorlib这个.NET默认程序集
○ .assembly extern MyClass,表示在CLR运行时需要引用MyClass这个自定义程序集
○ .assembly MainClass语句块,包含了MainClass这个程序集的Manifest清单
○ .module MainClass.exe,表示MainClass这个程序集有一个module,名称是MainClass.exe,当然一个程序集可以包含多个module

 

“C#程序集系列”包括:

  C#程序集系列01,用记事本编写C#,IL代码,用DOS命令编译程序集,运行程序

  C#程序集系列02,使用记事本查看可执行程序集的IL代码

  C#程序集系列03,引用多个module

  C#程序集系列04,在程序集包含多个module的场景下理解关键字internal

  C#程序集系列05,让程序集包含多个module

  C#程序集系列06,程序集清单,EXE和DLL的区别

  C#程序集系列07,篡改程序集

  C#程序集系列08,设置程序集版本

  C#程序集系列09,程序集签名

  C#程序集系列10,强名称程序集

  C#程序集系列11,全局程序集缓存

  C#程序集系列12,C#编译器和CLR如何找寻程序集

  C#程序集系列13,如何让CLR选择不同版本的程序集

 

参考资料:

http://www.computersciencevideos.org/  created by Jamie King


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
重新整理数据结构与算法(c#系列)——树的前中后序遍历[十六] ...发布时间:2022-07-14
下一篇:
C#操作redis发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap