码迷,mamicode.com
首页 > 其他好文 > 详细

"运行时"如何解析类型引用

时间:2014-08-13 17:59:56      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   文件   数据   2014   

  先将下面的代码保存到文本中,存放到一个目录下面,E:\aa.txt

public sealed class Program{
    public static void Main(){
        System.Console.WriteLine("Hi");
        System.Console.Read();  
    }  
}

  编译上面的文本文件:

 bubuko.com,布布扣       bubuko.com,布布扣

  Program.exe是一个托管PE文件,由4个部分构成:PE32(+)头、CLR头、元数据以及IL。运行Program.exe时,CLR会加载并初始化它。然后,CLR读取程序集的CLR头,查找标识了应用程序入口的方法(Main)的MethodDefToken。然后,CLR会检索MethodDef元数据表,找到该方法的IL代码在文件中的偏移量,把这些IL代码JIT编译成本地代码。编译时会对代码进行验证以确保类型安全性。最后,将执行本地代码。

  下面展示了Main方法的IL代码。为了获取这个输出,请运行ILDasm.exe,选择“试图”|“显示字节”,然后双击树形试图中的Main方法。

bubuko.com,布布扣

  对这个代码进行JIT编译时,CLR会检查对类型和成员的所有引用,并加载定义了它们的程序集。可以看出,上述IL代码有一个对System.Console.WriteLine的引用。具体地说,IL call指令引用了元数据token 0A000003。这个token对应于MemberRef元数据表(表0A)中的记录项3。CLR检查这个MemberRef记录项,发现它的一个字段引用了一个TypeRef表中的一个记录项(System.Console类型)。根据TypeRef记录项,CLR被引导至一个AssemblyRef记录项:“mscorlib, version=4.0.0.0, culture=neutral, PublicKeyToken=b77a5c561934e089”。这样,CLR就知道了它需要的是哪一个程序集。接着,CLR必须定位并加载该程序集。

 

"运行时"如何解析类型引用,布布扣,bubuko.com

"运行时"如何解析类型引用

标签:style   blog   http   color   io   文件   数据   2014   

原文地址:http://www.cnblogs.com/zhongxinWang/p/3910290.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!