本文主要介绍IL代码,内容大部分来自网上,进行整理合并的。

一、IL简介

 为什么要了解IL代码?

  如果想学好.NET,IL是必须的基础,IL代码是.NET运行的基础,当我们对运行结果有异议的时候,可以通过IL代码透过表面看本质;IL也是更好理解、认识CLR的基础;大量的实例分析是以IL为基础的,所以了解IL,是读懂他人代码的必备基础,同时自己也可以获得潜移默化的提高;

 什么是IL?

  IL是.NET框架中中间语言(Intermediate Language)的缩写。使用.NET框架提供的编译器可以直接将源程序编译为.exe或.dll文件,但此时编译出来的程序代码并不是CPU能直接执行的机器代码,而是一种中间语言IL(Intermediate Language)的代码(来源百度)。

  IL指令大全  点这里

   IL代码编译器 ILDasm   点这里

 C#代码编译过程?

  C#源代码通过LC转为IL代码,IL主要包含一些元数据和中间语言指令;JIT编译器把IL代码转为机器识别的机器代码。如下图

  语言编译器:无论是VB code还是C# code都会被Language Compiler转换为MSIL

  MSIL的作用:MSIL包含一些元数据和中间语言指令

  JIT编译器的作用:根据系统环境将MSIL中间语言指令转换为机器码

  为什么ASP.NET网站第一次运行时会较慢,而后面的执行速度则会相对快很多?

  当你第一次运行.NET开发的站点时,CLR会将MSIL通过JIT进行编译,最终转换为执行速度非常快的Native Code。这可以解释。

  关于这一部分,我也不大熟悉,以后再学习。

二、怎么查看IL代码

  (一)IL查看工具

   现在可以查看IL的工具其实很多。

   (1)ILDasm

    打开vs,在工具 - > 外部工具 ,把ILDasm导入到VS工具中,具体如下:

    

    位置:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\ildasm.exe,

    Microsoft SDKs\Windows下的文件夹下有多个ildasm,包括的版本有.NET 4.0 ,4.5.1,4.6,4.6.1,4.6.2等

    在VS的工具下这时就可以看到,打开ILDasm,然后打开想看的dll或exe就可以了,IL代码通过ILDasm反编译后,如下:

    

    符号解释:

如果想查看IL,通过文件-转储保存下来就可以查看

    (2)ILSpy

      使用简单,注意:默认选择的是c#,改为IL即可

      开源地址:https://github.com/icsharpcode/ILSpy

     (3)Reflector 

      这是也是很出名的,不介绍了,使用教材:https://www.cnblogs.com/Helius/p/5273116.html

     (4)LINQPad

      它实际是个对linq方面的工具,但也可以看IL

      

    (5)Resharper

      打开方法:vs的Resharper菜单栏-window-IL Viewer,随时都可以查看

      有条件的,建议使用,非常方便

  (二)实例解析

       1.使用.net Reflector手动修改单个dll文件

      https://www.cnblogs.com/lycnblogs/p/5026413.html

参考:

http://www.cnblogs.com/zery/archive/2013/10/15/3366175.html

https://www.cnblogs.com/yinrq/p/5486103.html

http://www.jb51.net/article/39635.htm

https://www.cnblogs.com/tk091/archive/2012/09/01/2666810.html

转载于:https://www.cnblogs.com/xcsn/p/3382306.html

详解.NET IL代码(一)相关推荐

  1. python随机数程序源码_Python 实现随机数详解及实例代码

    Python3实现随机数 random是用于生成随机数的,我们可以利用它随机生成数字或者选择字符串. random.seed(x)改变随机数生成器的种子seed. 一般不必特别去设定seed,Pyth ...

  2. java super实例_java Super 用法详解及实例代码

    java Super 用法详解及实例代码 发布于 2021-1-8| 复制链接 摘记: java  Super 用法详解 1)有人写了个很好的初始化属性的构造函数,而你仅仅想要在其中添加另一些自己新建 ...

  3. JavaScript 身份证号有效验证详解及实例代码

    这篇文章主要介绍了JavaScript 身份证号有效验证详解及实例代码的相关资料,需要的朋友可以参考下 JavaScript验证身份证号 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...

  4. 希尔排序基础java代码_java 算法之希尔排序详解及实现代码

    摘要:这篇Java开发技术栏目下的"java 算法之希尔排序详解及实现代码",介绍的技术点是"希尔排序详解.实现代码.希尔排序.Java.实现.代码",希望对大 ...

  5. 超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享...

    超轻量级DI容器框架Google Guice与Spring框架的区别教程详解及其demo代码片段分享 DI框架 Google-Guice入门介绍 转载于:https://www.cnblogs.com ...

  6. Java 线程池详解及实例代码

    转载自  Java 线程池详解及实例代码 这篇文章主要介绍了Java 线程池的相关资料,并符实例代码,帮助大家学习参考,需要的朋友可以参考下 线程池的技术背景 在面向对象编程中,创建和销毁对象是很费时 ...

  7. mysql 字段 as_mysql 字段as详解及实例代码

    mysql 字段使用as 在mysql中,select查询可以使用AS关键字为查询的字段起一个别名,该别名用作表达式的列名,并且别名可以在GROUP BY,ORDER BY或HAVING等语句中使用. ...

  8. android Json解析详解(详细代码)

    android Json解析详解(详细代码)   JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当 ...

  9. 【OpenCV实战】OpenCV实现人脸检测详解(含代码)

    OpenCV中有许多可以进行人脸.人眼检测的特征文件,今天我们利用OpenCV中自带的特征文件haarcascade_frontalface_default.xml来进行人脸检测. [OpenCV实战 ...

最新文章

  1. Nature | 有机合成的数字化
  2. GDLiveStreaming视频推送RTMP
  3. 坑中速记整理! 使用 kotlin 写第一个 ReactNative Android 模块
  4. 2020年李永乐线性代数强化笔记-向量
  5. Check for Palindromes(算法)
  6. Redis学习手册(String数据类型)
  7. 火狐浏览器title过长显示不全_浏览器渲染
  8. GitHub上如何删除fork别人的repository
  9. ZYNQ ZCU102视频编码开发
  10. android rom root权限,教你刷机包获取ROOT权限的方法
  11. Apache 配置ssl证书
  12. 创建SvcHost.exe调用的服务原理与实践
  13. RPC框架的使用场景
  14. 3天实现暴力涨粉500+的引流话术整理!
  15. mac辅助功能授权无效
  16. 华为交换机查看设备型号
  17. 传iPhone8将搭载裸眼3D技术
  18. 88E1111与千兆网口连接
  19. vivox70pro怎么拍出好看的月亮
  20. 关于ioctl幻数构造

热门文章

  1. 今日头条PHP开发工程师面试,今日头条2018春招研发岗第一次笔试题解
  2. java 扫描类_Java扫描指定包中所有类
  3. python random randint_python中random.randint(1,100)随机数中包不包括1和100
  4. html嵌入原始数据,如何用html和javascript显示原始图像数据?
  5. JavaExcel工具类(兼容xls和xlsx)
  6. linux redis 5.6扩展,Windows下为PHP5.6安装Redis扩展和memcached扩展
  7. arthas 查看哪个方法调用最耗时_阿里巴巴问题排查神器Arthas使用实践
  8. html中把句子往右边弄一点咋办,CSS上的左,中,右对齐方法,可以在一行上混合...
  9. 【youcans 的 OpenCV 例程 200 篇】105. 湍流模糊退化模型
  10. 二叉树两节点距离java,求二叉树中两个节点的最远距离