zoukankan      html  css  js  c++  java
  • 生成、打包、部署和管理应用程序及类型(2):元数据概述

    托管文件PE(Program.exe)文件由四部分构成:PE32(+)头、CLR头、元数据以及IL。PE32(+)头是Windows要求的标准信息。CLR头是一个小的信息快,是需要CLR的模块特有的。这个头包含模块生成时所面向的CLR的major和minor版本号。最后,CLR头还包含模块内部的一些元数据表的大小和偏移量。

    元数据是由3个表构成的二进制数据块:定义表、引用表和清单表。

    可以用多种工具检查托管在PE文件中的元数据。例如ILDasm.exe。使用工具,可以看到元数据信息:

    ===========================================================
    ScopeName : Program.exe
    MVID      : {8DF25279-3C44-4141-AAFA-6056CDD958E7}
    ===========================================================
    Global functions
    -------------------------------------------------------
    
    Global fields
    -------------------------------------------------------
    
    Global MemberRefs
    -------------------------------------------------------
    
    TypeDef #1 (02000002)
    -------------------------------------------------------
        TypDefName: Project_1.Program  (02000002)
        Flags     : [NotPublic] [AutoLayout] [Class] [AnsiClass] [BeforeFieldInit]  (00100000)
        Extends   : 01000001 [TypeRef] System.Object
        Method #1 (06000001) [ENTRYPOINT]
        -------------------------------------------------------
            MethodName: Main (06000001)
            Flags     : [Private] [Static] [HideBySig] [ReuseSlot]  (00000091)
            RVA       : 0x00002050
            ImplFlags : [IL] [Managed]  (00000000)
            CallCnvntn: [DEFAULT]
            ReturnType: Void
            1 Arguments
                Argument #1:  SZArray String
            1 Parameters
                (1) ParamToken : (08000001) Name : args flags: [none] (00000000)
    
        Method #2 (06000002) 
        -------------------------------------------------------
            MethodName: .ctor (06000002)
            Flags     : [Public] [HideBySig] [ReuseSlot] [SpecialName] [RTSpecialName] [.ctor]  (00001886)
            RVA       : 0x0000205e
            ImplFlags : [IL] [Managed]  (00000000)
            CallCnvntn: [DEFAULT]
            hasThis 
            ReturnType: Void
            No arguments.
    
    
    TypeRef #1 (01000001)
    -------------------------------------------------------
    Token:             0x01000001
    ResolutionScope:   0x23000001
    TypeRefName:       System.Object
        MemberRef #1 (0a000004)
        -------------------------------------------------------
            Member: (0a000004) .ctor: 
            CallCnvntn: [DEFAULT]
            hasThis 
            ReturnType: Void
            No arguments.
    
    TypeRef #2 (01000002)
    -------------------------------------------------------
    Token:             0x01000002
    ResolutionScope:   0x23000001
    TypeRefName:       System.Runtime.CompilerServices.CompilationRelaxationsAttribute
        MemberRef #1 (0a000001)
        -------------------------------------------------------
            Member: (0a000001) .ctor: 
            CallCnvntn: [DEFAULT]
            hasThis 
            ReturnType: Void
            1 Arguments
                Argument #1:  I4
    
    TypeRef #3 (01000003)
    -------------------------------------------------------
    Token:             0x01000003
    ResolutionScope:   0x23000001
    TypeRefName:       System.Runtime.CompilerServices.RuntimeCompatibilityAttribute
        MemberRef #1 (0a000002)
        -------------------------------------------------------
            Member: (0a000002) .ctor: 
            CallCnvntn: [DEFAULT]
            hasThis 
            ReturnType: Void
            No arguments.
    
    TypeRef #4 (01000004)
    -------------------------------------------------------
    Token:             0x01000004
    ResolutionScope:   0x23000001
    TypeRefName:       System.Console
        MemberRef #1 (0a000003)
        -------------------------------------------------------
            Member: (0a000003) WriteLine: 
            CallCnvntn: [DEFAULT]
            ReturnType: Void
            1 Arguments
                Argument #1:  String
    
    Assembly
    -------------------------------------------------------
        Token: 0x20000001
        Name : Program
        Public Key    :
        Hash Algorithm : 0x00008004
        Version: 0.0.0.0
        Major Version: 0x00000000
        Minor Version: 0x00000000
        Build Number: 0x00000000
        Revision Number: 0x00000000
        Locale: <null>
        Flags : [none] (00000000)
        CustomAttribute #1 (0c000001)
        -------------------------------------------------------
            CustomAttribute Type: 0a000001
            CustomAttributeName: System.Runtime.CompilerServices.CompilationRelaxationsAttribute :: instance void .ctor(int32)
            Length: 8
            Value : 01 00 08 00 00 00 00 00                          >                <
            ctor args: (8)
    
        CustomAttribute #2 (0c000002)
        -------------------------------------------------------
            CustomAttribute Type: 0a000002
            CustomAttributeName: System.Runtime.CompilerServices.RuntimeCompatibilityAttribute :: instance void .ctor()
            Length: 30
            Value : 01 00 01 00 54 02 16 57  72 61 70 4e 6f 6e 45 78 >    T  WrapNonEx<
                          : 63 65 70 74 69 6f 6e 54  68 72 6f 77 73 01       >ceptionThrows   <
            ctor args: ()
    
    
    AssemblyRef #1 (23000001)
    -------------------------------------------------------
        Token: 0x23000001
        Public Key or Token: b7 7a 5c 56 19 34 e0 89 
        Name: mscorlib
        Version: 4.0.0.0
        Major Version: 0x00000004
        Minor Version: 0x00000000
        Build Number: 0x00000000
        Revision Number: 0x00000000
        Locale: <null>
        HashValue Blob:
        Flags: [none] (00000000)
    
    
    User Strings
    -------------------------------------------------------
    70000001 : ( 4) L"HaHa"
    
    
    Coff symbol name overhead:  0
    ===========================================================
    ===========================================================
    ===========================================================

    无需完全理解这些信息。Program.exe包含名为Project_1.Program(Project_1是工程名字)的TypeDef。Program是公共密封类,从System.Object派生。Program类型还定义了两个方法:Main和.ctor。

    Main是公共静态方法,用IL代码实现。Main返回类型是void 。构造器是公共方法,用IL代码实现,返回类型是void,有一个this指针指向调用方法时构造对象的内存。

  • 相关阅读:
    高可用、高并发浅析
    正则表达式笔记
    linux下通过脚本切换当前工作目录
    nginx学习笔记
    二进制安全
    负载均衡相关
    有用的shell命令
    TCP服务器/客户端代码示例
    UDP服务器/客户端代码示例
    GCC链接的几个注意点
  • 原文地址:https://www.cnblogs.com/renzhoushan/p/10366014.html
Copyright © 2011-2022 走看看