元数据与IL简介

1.3.2       元数据

元数据是描述数据的数据。在CLR的上下文中,元数据表示由描述符组成的一套体系,这些操作符包括了在一个模块中被声明或引用的所有项。由于CLR模型是面向对象的,因此在元数据中描述的项是类和它们的成员,以及它们伴随着的特性、属性和关联。本节简单地介绍元数据,与原数据安全相关的内容会在后续章节中继续讲解,元数据的详细内容不在本书的论述范围之内。

元数据实际上是一块二进制数据,包含了三种表:定义表、引用表和清单表。

元数据定义表主要是模块定义、类型定义、方法定义、字段定义、事件定义、参数定义、属性定义等一系列定义表的集合。当编译器编译代码时,所有定义的内容都会生成对应的定义表。

元数据引用表用于记录编译器中源代码引用的类型、方法、字段、事件。常用的引用表如:AssemblyRef(程序集引用表)、ModuleRef(模块引用表)、TypeRef(类型引用表)等。

元数据清单表包含了组成程序集所需要的所有信息,同时包含了对其他程序集的引用信息。它明确地指出了哪些条目可以对外开放,哪些条目只可以在程序集内部进行访问。

下面通过经典的HelloWorld程序简要分析其中的元数据信息,如代码清单1-7所示。

代码清单1-7 HelloWorld程序代码

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace HelloWorld

{

    class Program

    {

        static void Main(string[] args)

        {

            Console.WriteLine("Hello World!");

            Console.Read();

        }

    }

}

下面使用反汇编工具ILDasm打开HelloWorld.exe,双击MANIFEST,图1-7为查看清单信息的截图。ILDasm的使用方法和参数说明请读者参考MSDN文档。

图1-7  查看程序清单信息

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数据
, 元数据
, 程序
, helloworld
, 代码
, 清单
信息
元数据与数据元的区别、主数据与元数据、元数据与主数据区别、数据元与元数据、数据字典与元数据,以便于您获取更多的相关知识。

时间: 2024-09-05 04:25:39

元数据与IL简介的相关文章

[你必须知道的.NET]第二十六回:认识元数据和IL(下)

书接上回: 第二十四回:认识元数据和IL(上) , 第二十五回:认识元数据和IL(中) 我们继续. 终于到了,说说元数据和IL在JIT编译时的角色了,虽然两个回合的铺垫未免铺张,但是却丝毫不为过,因为只有充分的认知才有足够的体会,技术也是如此.那么,我们就开始沿着方法调用的轨迹,追随元数据和IL在那个神秘瞬间所贡献的力量吧 5 元数据和IL在JIT编译时 CLR最终执行的只有本地机器码,所以JIT编译的作用是在运行时将IL代码解析为机器码执行.对于JIT编译,我们会以专门的篇幅来全面了解,本文只

[你必须知道的.NET]第二十五回:认识元数据和IL(中)

书接上回[第二十四回:认识元数据和IL(上)],我们对PE文件.程序集.托管模块,这些概念与元数据.IL的关系进行了必要的铺垫,同时顺便熟悉了以ILDASM工具进行反编译的基本方法认知,下面是时候来了解什么是元数据,什么是IL这个话题了,我们继续. 很早就有说说Metadata(元数据)和IL(中间语言)的想法了,一直在这篇开始才算脚踏实地的对这两个阶级兄弟投去些细关怀,虽然来得没有<第一回:恩怨情仇:is和as>那么迅速,但是Metadata和IL却是绝对重量级的内容,值得我们在任何时间关注

[你必须知道的.NET]第二十四回:认识元数据和IL(上)

说在,开篇之前 很早就有说说Metadata(元数据)和IL(中间语言)的想法了,一直在这篇开始才算脚踏实地的对这两个阶级兄弟投去些细关怀,虽然来得没有<第一回:恩怨情仇:is和as>那么迅速,但是Metadata和IL却是绝对重量级的内容,值得我们在任何时间关注,本文就是开始. 1 引言 你可曾想到,我们的C#代码,编译之后究竟为何物?你可曾认知,我们的可执行程序,运行之时的轨迹究竟为哪般?那么,本文通过对Metadata(元数据)和IL(Intermediate Language, 中间语

详解.NET IL代码(一)

本文主要介绍IL代码,内容大部分来自网上,进行整理合并的. 一.IL简介 为什么要了解IL代码? 如果想学好.NET,IL是必须的基础,IL代码是.NET运行的基础,当我们对运行结果有异议的时候,可以通过IL代码透过表面看本质:IL也是更好理解.认识CLR的基础:大量的实例分析是以IL为基础的,所以了解IL,是读懂他人代码的必备基础,同时自己也可以获得潜移默化的提高: 什么是IL?  IL是.NET框架中中间语言(Intermediate Language)的缩写.使用.NET框架提供的编译器可

[你必须知道的.NET]第十四回:认识IL代码---从开始到现在

本文将介绍以下内容: ·IL代码分析方法 ·IL命令解析 ·.NET学习方法论 1.引言 自从『你必须知道.NET』系列开篇以来,受到大家很多的关注和支持,给予了anytao巨大的鼓励和动力.俱往昔,我发现很多的园友都把目光和焦点注意在如何理解IL代码这个问题上.对我来说,这真是个莫大的好消息,因为很明显我们的思路慢慢的从应用向底层发生着转变,技巧性的东西是一个方面的积累,底层的探索在我认为也是必不可少的修炼.如果我们选择了来关注这项修炼,那么我们就应该选择如何来着手这项修炼,首先关注anyta

是不是这个:ADO+ 引导数据种类的演变 (转自 ms 一)

ado|数据 利用 .NET 框架简化发布和解决 DLL Hell 问题Steven Pratschner Microsoft Corporation 2000年9月 摘要: 本文介绍汇编概念并说明 .NET 框架如何使用汇编解决版本和发布问题. 目录 简介 问题叙述 解决方案的特性 汇编:积木 版本与共享 版本策略 发布 摘要 -------------------------------------------------------------------------------- 简介

利用 .NET 框架简化发布和解决 DLL Hell 问题

解决|问题 摘要: 本文介绍汇编概念并说明 .NET 框架如何使用汇编解决版本和发布问题. 目录 简介 问题叙述 解决方案的特性 汇编:积木 版本与共享 版本策略 发布 摘要 -------------------------------------------------------------------------------- 简介 Microsoft .NET 框架介绍了几个新功能,旨在简化应用程序发布和解决 DLL Hell.最终用户和开发人员都熟悉版本和发布问题,这些问题会伴随着如

ASP.NET vs ASP——编译与解释的区别

asp.net|编译|区别 2000年6月Microsoft公司发布.NET计划以来,使编程工作在业界中引起了一次划时代的革命.ASP.NET是.NET计划中的一个重要组成部分,其为Web应用程序开发人员提供了许多新特性,这些特性包括已编译的服务器端代码.一种将服务器端逻辑与客户端布局相分离的代码隐藏(code-behind)技术.可扩展的服务器端控件模型.设计数据绑定模型.xcopy部署以及客户和服务器上的窗体身份证验证支持等. ASP.NET作为一种先进的Web应用程序开发技术,相对于ASP

ASP.NET与ASP编译与解释的区别

asp.net|编译|区别     2000年6月Microsoft公司发布.NET计划以来,使编程工作在业界中引起了一次划时代的革命.ASP.NET是.NET计划中的一个重要组成部分,其为Web应用程序开发人员提供了许多新特性,这些特性包括已编译的服务器端代码.一种将服务器端逻辑与客户端布局相分离的代码隐藏(code-behind)技术.可扩展的服务器端控件模型.设计数据绑定模型.xcopy部署以及客户和服务器上的窗体身份证验证支持等.     ASP.NET作为一种先进的Web应用程序开发技