我们先写个最简单的Console App,打印出一行字符:

using System;
using System.Collections.Generic;
using System.Text;
namespace ILTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Test App for IL");
        }
    }
}

编译成功以后,得到一个exe文件.
我们用MSIL Disassembler打开这个.net编译的扩展了的PE格式的EXE文件,得到Metedata和IL.
ILTest.Program在ILDASM反编译出来有三个方法,本别是
//方法一:
.class private auto ansi beforefieldinit ILTest.Program
       extends [mscorlib]System.Object
{
} // end of class ILTest.Program

//方法二:
.method public hidebysig specialname rtspecialname 
        instance void  .ctor() cil managed
{
  // Code size       7 (0x7)
  .maxstack  8
  IL_0000:  ldarg.0
  IL_0001:  call       instance void [mscorlib]System.Object::.ctor()
  IL_0006:  ret
} // end of method Program::.ctor

//方法三:
.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // Code size       13 (0xd)
  .maxstack  8
  IL_0000:  nop
  IL_0001:  ldstr      "Test App for IL"
  IL_0006:  call       void [mscorlib]System.Console::WriteLine(string)
  IL_000b:  nop
  IL_000c:  ret
} // end of method Program::Main

除此之外,在这个PE32文件中还包含一个"清单(MainFest)"的数据块.清单是由元数据表构成的另外一种集合.这些表描述了构成程序集的文件.由程序集中的文件实现的公共导出的类型,以及和这些程序集关联在一起的一些资源或者是数据文件.

同时,在Debug文件夹下面还生成了一个与项目文件同名的  <项目文件名>.vshost.exe文件.这个文件是一个提高调试性能的宿主进程,,支持部分信任调试并支持设计时表达式计算。

另外,还包含了一个同名的pdb文件,程序数据库文件,保存着调试和项目的状态信息的一个文件.从而可以对调试配置进行增量链接.当用 /ZI 或 /Zi 编译 C/C++ 程序时或用 /debug 编译 Visual Basic/C# 程序时将创建 PDB 文件.对于本机代码,它驻留在 \debug 子目录中。而对于托管代码,它驻留在 \WINDEBUG 子目录中。

转载于:https://www.cnblogs.com/lbq1221119/archive/2007/10/13/923418.html

C# via CLR之IL中间语言初步探索相关推荐

  1. .NET的3C:CTS、CLS和CLR 以及 IL

     .NET的3C:CTS.CLS和CLR .NET结合Java和COM解决方案两者优点来解决互操作性问题.类似于COM定义的标准二进制格式,.NET定义了一个称为通用类型系统Common Type S ...

  2. python socket发送数组_利用pyprocessing初步探索数组排序算法可视化

    [经过两次更新,功能基本完成]最终效果请直接下拉到最后一个视频观看 背景说明 这篇文章旨在初步探索利用pyprocessing的强大的可视化功能,以及pyprocessing和Ipython之间的本地 ...

  3. Alibaba Druid 源码阅读(二) 数据库连接池实现初步探索

    Alibaba Druid 源码阅读(二) 数据库连接池实现初步探索 简介 在上篇文章中,了解了连接池的应用场景和本地运行了示例,本篇文章中,我们尝试来探索下Alibaba Druid数据库连接池的整 ...

  4. Redis主从复制架构初步探索 http://www.sxt.cn/info-1750-u-324.html#SXT_h2_11

    Redis主从复制架构初步探索 目录http://www.sxt.cn/info-1750-u-324.html#SXT_h2_11 ·  一.主从复制架构简介 ·  1.1 源于关系数据库的读写分离 ...

  5. 企查查app sign算法破解初步探索

    企查查app sign算法破解初步探索 之前有说过企查查的sign的解密,但这次是企查查app的sign算法破解,目前是初步进程. 目前我们需要做查壳,具体方法可以百度搜索,企查查用的360加固,很简 ...

  6. ASPNet请求处理机制初步探索之旅Part2核心

    ASPNet请求处理机制初步探索之旅Part2核心 开篇:上一篇我们了解了一个请求从客户端发出到服务端接收并转到ASP.Net处理入口的过程,这篇我们开始探索ASP.Net的核心处理部分,借助强大的反 ...

  7. 创客教育和Mixly的初步探索

    创客教育的理论与实践 + Mixly的初步探索 创客教育 傅骞老师在课堂上指出,创客教育要注重"创新"和"分享","创客就是让你没有目标的去做你喜欢做 ...

  8. 电子游戏理论基础知识的初步探索(转)

    电子游戏理论基础知识的初步探索(转)[@more@] 抛砖引玉,请读者指正. 一.游戏(Game) 约翰?赫伊津哈和弗里德里?希格奥尔格?容格尔在<游戏的人>(1938年)和<玩游戏 ...

  9. 【Google Earth Studio】初步探索

    Google Earth Studio教程专栏 [Google Earth Studio]初步探索 [Google Earth Studio]基础编辑技巧 [Google Earth Studio]进 ...

最新文章

  1. 感知器调参之梯度下降法
  2. Windows 8.1 重复数据删除
  3. 西电计算机本科学费,陕西高校学费大比拼!你当年的学费现在涨了多少
  4. 管理系统模板c语言,管理系统c语言
  5. C#实现文件下载代码
  6. oracle数据库服务器启动后需执行的命令(SecureCRT中执行)
  7. java 拖放文字_Java实现拖放效果
  8. seaborn—seaborn.regplot绘制线性回归拟合图
  9. Android开发学习(3)Hello Android!
  10. android 吃鸡模拟器,《刺激战场模拟器》电脑版 逍遥安卓模拟器智能键吃鸡设置...
  11. threejs包围盒的应用
  12. 湘源控规7.0安装 详细图文教程
  13. win10系统崩溃怎么修复
  14. TP5——workerman在线客服
  15. uefi和legacy的区别是什么
  16. 水印watermark
  17. SAP FI 系列 (030) - 特别总账标记
  18. 飞机行李托运java代码_CSS3 飞机行李托运单(含条形码)
  19. Electron常见问题 60 - 报错:Could not start audio source
  20. 常用的CSSreset

热门文章

  1. Deep_Rank,经典ctr系列预估模型复现框架
  2. 计算机专业毕业设计中期考核表,研究生中期考核表导师评语
  3. linux字符界面播放vcd,在Linux中制作VCD
  4. echarts grid的样式位置_CSS Grid 系列(下)-使用Grid布局构建网站首页
  5. android获取网络视频缩略图,Android 获取缩略图,网络视频,或者本地视频
  6. 十八年开发经验分享(三)问题解决篇(中)
  7. C#利用WCF改进文件流传输的三种方式
  8. OPENGL中的glViewport
  9. php语言中不能包含html标签,在邮件主题中包含html标签[PHP]
  10. markdown 提示文本_【文本编辑01】MarkdownPad安装及基本配置