摘要:一、初探MetaData
把支持CLR的编程语言(如C++/CLI、C#、VB等)编写的源代码文件通过微软的或者自己写的编译器可以编译为一个托管模块,它实际上是一个标准的PE文件,其结构可以参见深入了解CLR的加载过程一文。Metadata(元数据)与IL代码都存在于该PE文件的Sections中,Metadata与IL是同时生成且永远同步的,本文主要讨论Metadata的内容,并以如下代码为例:
阅读全文
摘要:CLR是如何找到托管代码的入口方法并对其Jit的呢?Jit的发生过程是怎么样的呢?Jit编译器和Metadata表又有什么关系呢?本文试图寻找出答案,在此之前,不妨先了解一下CLR Header的大致结构。
以如下代码为例:
阅读全文
摘要:我们知道,.net编译器在生成托管代码时会将一些重要信息写入PE文件的header和.text section(后边我会介绍这些写入程序集的重要信息是什么),本文介绍当我们双击一个托管代码写的exe程序时发生的事情。
阅读全文
摘要:Microsoft intermediate language (MSIL)是一种编程语言,可以把它看成是组成.NET Framework的一部分,不论从内容还是形式上它都像是一种汇编语言,但是与传统的汇编语言又不太一样,初学MSIL的时候觉得它很亲切,我可以用使用高级语言编程的习惯来使用MSIL编程,例如它是面向对象的,可以用newobj指令生成一个类型实例,所以我在代码中可以这样来新建一个类型的对象:
newobj instance void AOP_Programing.UsingAOP::.ctor()
可以用callvirt指令来调用其虚方法:
callvirt instance void AOP_Programing.UsingAOP::Display()
阅读全文