clr 元数据】的更多相关文章

clr相关编译器编译生成的托管模块由四部分组成:PE32或32+头.clr头.元数据.IL代码. 元数据和IL代码完全对应,保持一致(:>)性. 元数据有很多用途: VS的智能感知,自动补全: 代码验证保证类型安全: 序列化.反序列化: 垃圾回收(从元数据得知哪些根引用了对象). 元数据包含两类表,一种描述源代码中定义的类型和成员:另一种描述代码引用的类型和成员.模块内部的一些元数据表的大小和偏移量在clr头中会有包含. 元数据是由几个表构成的二进制数据块.有三种表:定义表.引用表.清单表. 常…
下图展示了编译源代码文件的过程.如图所示,可用支持 CLR 的任何一种语言创建源代码文件.然后,用一个对应的编译器检查语法和分析源代码.无论选用哪一个编译器,结果都是一个托管模块(managedmodule).托管模块是一个标准的 32 位 Microsoft Windows 可移植执行体(PE32)文件 6 ,或者是一个标准的 64 位Windows 可移植执行体(PE32+)文件,它们都需要 CLR 才能执行.顺便说一句,托管的程序集总是利用了 Windows 的数据执行保护(Data Ex…
书接上回[第二十四回:认识元数据和IL(上)],我们对PE文件.程序集.托管模块,这些概念与元数据.IL的关系进行了必要的铺垫,同时顺便熟悉了以ILDASM工具进行反编译的基本方法认知,下面是时候来了解什么是元数据,什么是IL这个话题了,我们继续. 很早就有说说Metadata(元数据)和IL(中间语言)的想法了,一直在这篇开始才算脚踏实地的对这两个阶级兄弟投去些细关怀,虽然来得没有<第一回:恩怨情仇:is和as>那么迅速,但是Metadata和IL却是绝对重量级的内容,值得我们在任何时间关注…
发布日期:2009.02.25 作者:Anytao © 2009 Anytao.com ,Anytao原创作品,转贴请注明作者和出处. 说在,开篇之前 书接上回[第二十四回:认识元数据和IL(上)],我们对PE文件.程序集.托管模块,这些概念与元数据.IL的关系进行了必要的铺垫,同时顺便熟悉了以ILDASM工具进行反编译的基本方法认知,下面是时候来了解什么是元数据,什么是IL这个话题了,我们继续. 很早就有说说Metadata(元数据)和IL(中间语言)的想法了,一直在这篇开始才算脚踏实地的对这…
将源代码编译成托管模块 下图展示了编译源代码文件的过程.如图所示,可用支持 CLR 的任何一种语言创建源代码文件.然后,用一个对应的编译器检查语法和分析源代码.无论选用哪一个编译器,结果都是一个托管模块(managedmodule).托管模块是一个标准的 32 位 Microsoft Windows 可移植执行体(PE32)文件 6 ,或者是一个标准的 64 位 Windows 可移植执行体(PE32+)文件,它们都需要 CLR 才能执行.顺便说一句,托管的程序集总是利用了 Windows 的数…
介绍 一般来说,编译器是一个黑箱,源代码从一端进入,然后箱子中发生一些奇妙的变化,最后从另一端出来目标文件或程序集.编译器施展它们的魔法,它们必须对所处理的代码进行深入的理解,不过相关知识不是每个人都需要知道,除了实现编译器的大法师.因此在转换输出完成后相关的信息就会被遗忘. 对编译器来说,几十年来一直很好地为我们所用,但只是会用编译器已经不够.我们越来越依赖于集成开发环境(IDE)的特性,比如智能感知.重构.智能重命名.“查找所有引用”和“转到定义”来提高我们的生产率.我们依赖于代码分析工具来…
原文 : DotNetAnywhere: An Alternative .NET Runtime 作者 : Matt Warren 译者 : 张很水 我最近在收听一个名为DotNetRock 的优质播客,其中有以Knockout.js而闻名的Steven Sanderson 正在讨论 " WebAssembly And Blazor ". 也许你还没听过,Blazor 正试图凭借WebAssembly的魔力将 .NET 带入到浏览器中.如果您想了解更多信息,Scott Hanselme…
方法和JIT编译 CLR只执行本机的机器代码.如果一个方法体由CIL组成,那么它就必须在调用之前被转换为本机的机器码(将MSIL编译为本机代码,运行库提供了两种方式.一种就是在安装与部署时的预编译(由NGEN.EXE和MSCORPE.DLL产生).另一种就是用实时(JIT)编译器动态地将其转换为本机代码.)在第1章曾经简要地讨论过,将CIL转换到本机的机器码由两种解决的方法.默认的场景是推迟转换,直到该组件被加载到内存中时.这种解决之道被称为实时编译[just-in-time(JIT) comp…
运行时的类型 类型本身并不是万能的.类型真正有意思的地方在于,程序员使用类型的实例,并让它们相互作用.类型的实例(instance)既可以是对象,也可以是值,这取决于类型如何定义的.基本数据类型(primitive type)的实例是值,而绝大多数用户定义类型的实例是对象,尽管也存在能够产生值的类型. 每一个对象和每一个值都是一个确切类型的实例.实例和类型的从属关系通常是隐式的.例如,声明一个System.Int32类型的变量或字段,其结果是分配一块符合该类型的内存,它的存在与否取决于操纵它的执…
模块定义 CLR程序存在模块(module)中.一个CLR模块是一个字节流,通常作为一个文件存储在本地的文件系统中或者Web服务器上 CLR模块采用Windows NT的PE/COFF可执行文件格式的扩展版. PE:Portable Execute,可移植可执行文件.COFF:Common Object File Format,公共对象文件格式.当CLR编译器对C#,VB.NET等源程序编译后,产生MSIL(中间语言)和元数据.元数据描述代码中的类型,包括每种类型的定义,每种类型的成员的签名,代…