zoukankan      html  css  js  c++  java
  • (翻译)《Expert .NET 2.0 IL Assembler》 第四章 托管可执行体文件的结构 4.3 小结

    返回目录

    小结

    讨论过托管映像文件的结构以及IL编译器生成这些文件的方式,我将小结一下IL编译器创建一个托管PE文件的步骤。PE文件的创建表现为以下4个步骤:

    步骤1:初始化

    1.       初始化内部缓冲器

    2.       在内存创建一个PE文件的空模板,包括MS-DOS头和stubPE签名、COFF头和PE头。

    3.       输入地址表和CLR头被分配在.text区段中。

    步骤2:源代码的语法分析

    1.       元数据被收集在内部缓冲器中。

    2.       方法体(IL代码和托管的异常处理表)被收集在内部缓冲器中。

    3.       数据常量被发布到.sdata.tls区段。

    步骤3:图像的生成

    1.       为强签名在.text区段中分配空间。

    2.       元数据被分析和重新整理。

    3.       内部(到模块)的引用在IL代码中被处理。

    4.       方法体被发布到.text区段。

    5.       TLS目录表被发布到.sdata区段。

    6.       调试目录被发布到.text区段。

    7.       为元数据在.text区段中分配空间。

    8.       为内嵌的托管资源在.text区段中分配空间。

    9.       非托管的导出stub被发布到.text区段。

    10.   VTFixup标被发布到.text区段。

    11.   V-表被发布到. sdata区段。

    12.   非托管的导出表被发布到. sdata区段。

    13.   元数据中最近的改变——映射字段的RVA被修复。

    14.   元数据被发布在.text区段的预分配空间。

    15.   托管的资源被发布在.text区段的预分配空间。

    16.   运行时的开始stub被发布在.text区段

    17.   非托管资源被从.res文件中读取到,并被发布在.rsrc区段

    18.   必需的基本重定向被发布在.reloc区段

    步骤4:完成

    1.       映像文件被写为一个磁盘文件。

    2.       强签名过程被应用到文件,通过调用强名称工具的方式。

    IL编译器允许你在映像文件的头中显示地设置某个值,依靠源代码指令和编译器命令行选项,正如表4-7所示。在本章所讨论的所有情形中,命令行选项优先于相应的源代码指令。

      

    字段

    指令

    命令行选项

    COFF

    Machine

    /ITANIUM, /X64(default is I386)

    PE

    Header type

    /PE64(default is PE32)

    PE

    ImageBase

    .imagebase <integer value>

    /BASE=<integer value>

    PE

    SizeOfStackReserve

    .stackreserve <integer value>

    /STACK=<integer value>

    PE

    FileAlignment

    .file alignment <integer value>

    /ALIGNMENT=<integer value>

    PE

    Subsystem

    .subsystem <integer value>

    /SUBSYSTEM=<integer value>

    CLR

    Flags

    .corflags <integer value>

    /FLAGS=<integer value>

      

    Commit翻译——提交?

    Preferred——首选的

    take precedence of——优先于

    make nontrivial use of = 很需要使用

    as sush 同样的

  • 相关阅读:
    《数据挖掘导论》研读(1)
    《机器学习理论、方法及应用》研读(2)
    《机器学习理论、方法及应用》研读(1)
    Python3爬虫(3)_urllib.error
    Python3爬虫(2)_利用urllib.urlopen发送数据获得反馈信息
    debian 安装svn197
    Debian卸载软件197
    chmod 详解197
    debian 创建快捷方式197
    vim高亮配置197
  • 原文地址:https://www.cnblogs.com/Jax/p/1278153.html
Copyright © 2011-2022 走看看