详解.NET IL代码(一)

  本文主要介绍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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/575719.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS yum安装mcrypt详细图解教程[linux]

在Linux的发行版CentOS 6.3 系统下,LAMP(LinuxApacheMysqlphp)环境搭建好后发现PHPMyadmin提示 “无法载入mcrypt模块” 的错误感觉很不爽,就尝试着使用yum安装提示找不到模块。如下为执行过程: [rootptr228 ~]# yum install php-mcrypt Sett…

matlab计算大米个数,如何求数组元素的个数 matlab

2016-11-21 回答比如说你的数组是a,那么元素个数可以这样求解:[m,n]size(a);numm*n例如;a 1 1 0 1 1 0 0 1 1 1 0 11 1 0 1 0 0 1 1 1 1 0 01 1 1 1 1 0 1 0 1 0 0 10 0 1 1 0 1 0 0 0 1 1 10 0 0 1 1 1 0 1 1 0 0 00 1 0 1 0 1 0 1 1 1 1 01…

软引用、弱引用、虚引用

阅读:http://sish#去掉我#uok.com/forum/posts/list/342.html 我很好奇为什么不能引用某网站的文字...... 对强弱等引用早有耳闻,却一直发现似乎无用武之地,今早看了 http://android-developers.blogspot.com/2010/07/multithreading-for-per…

matlab dll没有头文件,matlab调用dll没有头文件怎么办

2018-12-08 回答基于dll形式vc调用matlab函数方法如果在一matlab中或vc中写好了函数的话,想在对方的环境中使用,直接将对方语言的函数编译成dll是一个很方便的方法,不需要重写了。今天把基于dll形式vc调用matlab函数的主要过程写下&#xff0…

关于安装Ubuntu后触摸板无法使用的解决方案

安装了Ubuntu后发现触摸板无法使用,以为是修改了安装文件导致(之前拿安装源文件做了小实验),于是重装,之后触摸板仍无法使用,在一个长满小广告的页面上找到了解决方案。 以下是原文章内容: 最近…

matlab实现频域率滤波,基于Matlab的图像的频域滤波实现及研究.doc

摘要:图像的频域滤波是图像增强的一种方法。图像增强是图像处理的方法之一,有频率域法和空间域法。频率域法把图像看成一种二维信号,对其进行二维傅里叶变换的信号增强,采用低通滤波法可以去掉图像的噪声;采用高通滤波…

python屏幕的交互(读取输出信息)input,raw_input的区别

>>> input("your name?") your name?sam Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> input("your name?") File "<string>", line 1, in <module> Na…

php str pa,php截取字符串方法有哪些

php截取字符串方法有&#xff1a;1、使用substr函数截取字符串&#xff1b;2、使用mb_substr函数截取字符串&#xff1b;3、使用自定义的“function mysubstr($str, $start, $len){}”方法截取字符串等等。本文操作环境&#xff1a;windows7系统、PHP7.1版&#xff0c;DELL G3电…

matlab里box office,免费试用Econometrics Toolbox

请选择其一AlabamaAlaska美属萨摩亚APO/FPO AAAPO/FPO AEAPO/FPO APArizonaArkansasCaliforniaCaroline IslandsColoradoConnecticutDelawareDistrict of ColumbiaFlorida格鲁吉亚关岛HawaiiIdahoIllinoisIndianaIowaKansasKentuckyLouisianaMaineMariana Islands马绍尔群岛Mar…

[算法 笔记]2014年去哪儿网 开发笔试(续)第一题BUG修正

上一篇的blog地址为&#xff1a;http://www.cnblogs.com/life91/p/3313868.html 这几天又参加了一个家公司的笔试题&#xff0c;在最后的编程题中竟然出现了去哪儿网开发的第一题&#xff0c;也就是简化路径值。但是这次做题后&#xff0c;我发现我上次写的那个简化源码有很多问…

java封装264成flv,将H.264封装为FLV格式-Go语言中文社区

本文将介绍如何将H.264封装成flv格式。在看本文之间&#xff0c;建议先看一看下面两篇文章&#xff1a;首先说一说构建一个FLV文件需要什么&#xff1f;FLV Header FLv script tag FLV Video tag FLV Audio tag由于这里只是封装H.264&#xff0c;所以不包括Audio tag。下面将…

Activity 模版样式简介

1&#xff1a;对话框样式。 <activity android:theme"android:style/Theme.Dialog"> 2&#xff1a;透明样式。 <activity android:theme"android:style/Theme.Translucent"> 3&#xff1a;Light 样式,标题栏是细长型的&#xff0c;在4.0版本默…

java连接ldap验证,验证用户使用LDAP登录

我无法使用LDAP成功验证ASP.NET Web应用程序的用户 . 我已经在我们自己的网络上针对Active Directory这样做了&#xff0c;但这是针对我们网络之外的服务器&#xff0c;即OID(Oracle Internet Directory) .通常&#xff0c;我使用以下代码没有问题 .Dim myDirectoryEntry As Ne…

[转]iis7.5+win2008 出现 HTTP Error 503. The service is unavailable.

解决&#xff1a; 应用程序池启动32位应用程序 设置托管管道为集成 &#xff08;仍然有问题&#xff09; 试试以下方法&#xff1a; http://phpwind.me/1222.html 楼主 发表于: 2011-11-26 图片:123.png 访问网站之前 应用程序池是开启的 访问后 网页报503 service unavailabl…

mysql数据库的存储过程不用学吗,MySql数据库之存储过程学习_MySQL

之前在工作中总是听别人提到存储过程&#xff0c;觉得是个很高深的东西&#xff0c;利用工作之余&#xff0c;看了下相关的知识&#xff0c;现将学习知识总结如下&#xff0c;希望可以为刚学习的人提供些许帮助。开发环境&#xff1a;Navicat For Mysql。MySQL存储过程1.1、CRE…

// D:\SaveLog\_SaveLog.dpr立即备份晓亮的电脑操作记录热键(快捷键) F11由于原来的 AutoIt 杀毒软件总是误报没办法只好麻烦一点用 Delphi XE4 做了...

// D:\SaveLog\_SaveLog.dpr立即备份晓亮的电脑操作记录 热键(快捷键) F11由于原来的 AutoIt 杀毒软件总是误报没办法只好麻烦一点用 Delphi 各种版本 做了 (我主要用的版本是Delphi2007(Delphi11)) (从Delphi6到Embarcadero.Delphi.XE5.Lite) // D:\SaveLog\_SaveLog.dpr立即备…

python list sort by,python中List的sort方法指南

简单记一下python中List的sort方法(或者sorted内建函数)的用法。List的元素可以是各种东西&#xff0c;字符串&#xff0c;字典&#xff0c;自己定义的类等。sorted函数用法如下&#xff1a;sorted(data, cmpNone, keyNone, reverseFalse)其中&#xff0c;data是待排序数据&…

开站资源

1. 存储 七牛云存储 http://www.qiniu.com/ 2. 网站模板 https://drupal.org/ 参考&#xff1a;http://www.w3cplus.com转载于:https://www.cnblogs.com/javawer/p/3407065.html

sublime php运行环境,sublime php 运行环境

sublime php 运行环境sublime php 运行环境有时候需要用运行一段 PHP 代码&#xff0c;比如测试某个函数返回值等等&#xff0c;如果启动Http Server&#xff0c;再打开浏览器&#xff0c;那黄花菜都凉了。我们可以在 Sublime Text 3 中创建 php 的 build system&#xff0c;这…

由硬盘供电不稳、数据线品质差造成的蓝屏

开机正常&#xff0c;一但运行高IOPS的软件&#xff0c;就会蓝屏。 换电源或换数据线。或减短线路长度。 常见&#xff1a;0x0000007a rdyboost.sys ntkrnlpa.exe、0x000000f4 ntkrnlpa.exe Hookport.sys、0x1000008e ntkrnlpa.exe kisknl.sys。转载于:https://www.cnblogs.com…