• 生成、打包、部署和管理应用程序及类型(上)


    1    生成、打包、部署和管理应用程序及类型

    1.1   .net framework 部署目标

    Windows一直不稳定和过于复杂(其实也很封闭,逐渐开放,如core),微软认为主要原因是:

    (1)应用程序来自微软或其他厂商的dll,多个厂商的代码带来复杂性。安装新程序会破坏原有程序,带来dll hell。

    (2)安装复杂性。大多数应用安装的时候会影响到系统的全部组件。

    (3)安全性。安装程序会带来各种文件,许多不同公司开发的。

    1.2   将类型生成到模块中

    响应文件包含一组编译器命令开光的文件,执行csc.exe时,编译器打开响应文件,并使用其中包含的所有开关。

    1.3   元素据概述

    元素据是由几个表构成的二进制数据块,分别是定义表、引用表、清单表。

    模块元素据常用定义表如下:

    元素据定义表名称

    说明

    Moduledef

    总是包含对模块进行标识的一个记录项,该记录项包含模块文件名、拓展名、模块版本ID

    Typedef

    模块定义的每个类型在这个表中都有一个记录项,包含类型名、基类型、标志(public、private)、索引,索引指向Moduledef表中该类型的方法、fielddef表中该类型的字段、propertydef表中该类型的属性以及eventdef表中该类型的事件

    Methoddef

    模块定义的每个方法在这个表中都有一个记录项,包含方法的名称、标志(private、public、virtual、abstract,static、final)签名、方法的IL代码在模块的偏移量。还引用了paramdef表中的一个记录项,包括与方法参数有关的更多信息。

    Fielddef

    模块定义的每个字段在这个表中都有一个记录项,每个记录项都包含标志(private、public)、类型和名称

    paramdef

    模块定义的每个参数在这个表中都有一个记录项,包含标志(in、out、retval)、类型和名称

    Propertydef

    模块定义的每个属性在这个表中都有一个记录项,包含标志、类型和名称

    Eventdef

    模块定义的每个事件在这个表中都有一个记录项,包含标志和名称

    编译器还会检测源代码引用的类型、方法、字段、属性、事件,并创建相应的元素据表记录项。在创建的元素据中包含一组引用表,记录了所引用的内容,常用的引用元数据表如下:

    引用元素据表名称

    说明

    Assemblyref

    模块引用的每个程序集在这个表中都有一个记录项。包含绑定该程序集所需的信息:程序集名称、版本号、语言文化、公钥token。还包含一些标志(flag)和一个哈希值(忽略)。

    Moduleref

    实现该模块所引用的类型的每个PE模块在这个表中都有一个记录项,包含模块的文件名和拓展名。可能是别的模块实现了需要的类型,这个表的作用便是建立同那些类型的绑定关系。

    typeref

    模块引用的每个类型在这个表中都有一个记录项。记录项包含类型的名称和一个引用(指向位置)。

    memberref

    模块引用的成员(字段方法、属性方法、事件方法)在这个表中都有一个记录项,包含成员的名称和签名,并指向对成员进行定义的那个类型的typeref记录项。

    ILDasm.exe是检查托管PE的常用工具,通过命令 ILDasm program.exe

  • 相关阅读:
    boost库:函数对象
    boost库:智能指针
    linux 查看和修改文件时间
    linux正则表达式
    UVA
    UVA
    UVA
    UVA
    UVA
    对JavaScript的认识?
  • 原文地址:https://www.cnblogs.com/lzcgis/p/10251697.html
Copyright © 2020-2023  润新知