首页

链接器和加载器Beta2.pdf

标签:Java     发布时间:2023-02-21   
  • 云盘下载:
  • [提取码:5fw8]
       ( 需积分:2  )

目录


第0章 引子

献给    10 

介绍    10 

本书的目标读者是哪些人?    10 

章节摘要    11 

项目    12 

致谢    12 

联系我们    13


第1章 链接和加载 

链接器和加载器做什么?    14 

地址绑定:从历史的角度    14 

链接与加载    16

两遍链接    17 

目标代码库    18 

重定位和代码修改    19

编译器驱动    20 

链接器命令语言     21 

链接:一个真实的例子    22 

练习    26 


第2章 体系结构的问题

应用程序二进制接口    27 

内存地址    27 

字节顺序和对齐    27 

地址构成    29 

指令格式    29 

过程调用和可寻址性    30 

过程调用    30 

数据和指令引用    32 

IBM 370    32 

SPARC    34 

SPARC V8    34 

SPARC V9    35 

Intel x86    36 

分页和虚拟内存    37

程序地址空间    39 

映射文件    40 

共享库和程序    41 

位置无关代码    41

Intel 386 分段    42 

嵌入式体系结构    43

怪异的地址空间    44 

非一致性内存      44 

内存对齐    44

练习    44


第3章 目标文件

目标文件中都有什么?    47 

设计一个目标文件格式    47 

空目标文件格式: MS-DOS 的.COM 文件    48 

代码区段: Unix a.out 文件             48 

a.out 头部      50 

与虚拟内存的交互    51 

重定位:MS-DOS EXE 文件    54 

符号和重定位    56 

可重定位的a.out 格式    56 

重定位项     58 

符号和字串    59 

a.out 格式小结    60 

Unix ELF 格式     60 

可重定位文件      62 

ELF 可执行文件    66 

ELF 格式小结      68 

IBM 360 目标格式  68 

ESD 记录    69 

TXT 记录    70 

RLD 记录    70 

END 记录    71 

小结        71 

微软可移植可执行体格式    72 

PE 特有区段       76 

运行PE 可执行文件    77 

PE 和COFF    78 

PE 文件小结    78 

Intel/Microsoft 的OMF 文件格式    78

OMF 记录    79 

OMF 文件的细节    80 

OMF 格式小结      82

不同目标格式的比较    82 

项目    83 

练习    84


第4章 存储空间分配    85 

段和地址    85 

简单的存储布局    85 

多种段类型     87 

段与页面的对齐    88 

公共块和其它特殊段    88

公共块    89 

C++重复代码消除    90 

初始化和终结       92 

IBM 伪寄存器    93 

特殊的表    94 

X86 分段的存储分配    95

链接器控制脚本        96 

嵌入式系统的存储分配    97 

实际中的存储分配    98

Unix a.out 链接器的存储分配策略    98 

ELF 中的存储分配策略    99 

Windows 链接器的存储分配策略    101

练习    102 

项目    103


第5章 符号管理

绑定和名字解析    104

符号表格式    104

模块表    106 

全局符号表    108 

符号解析    109 

特殊符号    110

名称修改    110 

简单的C和Fortran名称修改    110 

C++类型编码:类型和范围    111 

链接时类型检查    113

弱外部符号和其它类型符号    113 

维护调试信息    113

行号信息    114 

符号和变量信息    114 

实际的问题        115

练习    115 

项目    116


第6章 库

库的目的    117 

库的格式    117

使用操作系统    117 

UNIX 和Windows的Archive文件    118 

扩展到 64 位    120 

Intel OMF 库文件    120

建立库文件    121 

搜索库文件    122 

性能问题    123 

弱外部符号    123 

练习    124 

项目    124


第7章 重定位

硬件和软件重定位    126 

链接时重定位和加载时重定位    127 

符号和段重定位    127

符号查找    128 

基本的重定位技术    128 

指令重定位    129 

ECOFF段重定位    131 

ELF 重定位    132 

OMF 重定位    132 

可重链接和重定位的输出格式    132 

其它重定位格式    133 

以链表形式组织的引用    133 

以位图形式组织的引用    134 

特殊段    134 

特殊情况的重定位    135 

练习    135 

项目    135


第8章 加载和重叠

基本加载    137 

带重定位的基本加载    138

位置无关代码    138 

TSS/360 位置无关代码    138 

例程指针表    140 

目录表    141 

ELF 位置无关代码    141 

位置无关代码的开销和得益    143

自举加载    144 

树状结构的覆盖    145

定义覆盖          147 

覆盖的实现    149 

覆盖的其它细节    150 

覆盖技术小结    151

练习    151 

项目    151


第9章 共享库

绑定时间    154 

实际的共享库    155 

地址空间管理    155 

共享库的结构    156 

创建共享库    156 

创建跳转表    157 

创建共享库    158 

创建空占位库    158 

版本命名    159 

使用共享库链接    159 

使用共享库运行    160 

malloc hack和其它共享库问题    160 

练习    163 

项目    163 


第10章 动态链接和加载

ELF 动态链接    165 

ELF 文件内容    165 

加载一个动态链接的程序    168 

启动动态链接器    169 

库的查找    169 

共享库的初始化    170 

使用PLT 的惰性过程链接(lazy procedure linkage)    171 

动态链接的其它特性    172 

静态的初始化    172

库的版本    173 

运行时的动态链接    173 

Microsoft 动态链接库    174

PE 文件中的输入/输出符号(imported and exported symbols)    174 

惰性绑定    177 

DLL 库和线程    178

OSF/1 伪静态共享库    178 

让共享库快一些    179 

几种动态链接方法的比较    179 

练习    180

项目    181


第11章 高级技术 

C++的技术    182 

试验链接    183 

消除重复代码    184 

借助于数据库的方法    185 

增量链接和重新链接    185 

链接时的垃圾收集    187 

链接时优化    188 

链接时代码生成    189 

链接时统计和工具    190 

链接时汇编    190 

加载时代码生成    190 

Java 链接模式    191 

加载Java 类    192 

练习    193 

项目    194