注册 登录 进入教材巡展
#
  • #

出版时间:2022-04-22

出版社:机械工业出版社

以下为《链接器和加载器》的配套数字资源,这些资源在您购买图书后将免费附送给您:
  • 机械工业出版社
  • 9787111703723
  • 1-4
  • 2022-04-22
  • 274
内容简介
本书讲述构建程序的关键工具——链接器和加载器,内容包括链接和加载、体系结构、目标文件、存储分配、符号管理、库、重定位、加载和覆盖、共享库、动态链接和加载、动态链接的共享库,以及着眼于成熟的现代链接器所做的一些变化;并介绍一个持续的实践项目,即使用Perl语言开发一个可用的小链接器。本书适合高校计算机相关专业的学生、实习程序员、语言设计者和开发人员阅读参考。
目录
译者序
前言
第1章 链接和加载 1
1.1 链接器和加载器做什么 1
1.2 从历史发展的角度分析地址绑定 1
1.3 链接与加载 3
1.3.1 两遍链接 4
1.3.2 目标代码库 5
1.3.3 重定位和代码修改 6
1.4 编译驱动器 7
1.5 链接:一个真实的例子 9
1.6 练习 12
第2章 体系结构相关问题 13
2.1 应用程序二进制接口 13
2.2 内存地址 13
2.3 地址构成规则 15
2.4 指令格式 15
2.5 过程调用和可寻址性 16
2.6 数据访问和指令引用 19
2.6.1 IBM 370 19
2.6.2 SPARC 21
2.6.3 Intel x86 23
2.7 分页和虚拟内存 24
2.7.1 程序的地址空间 26
2.7.2 文件映射 27
2.7.3 共享库和程序 28
2.7.4 位置无关代码 28
2.8 Intel 386分段 29
2.9 嵌入式体系结构 31
2.9.1 怪异的地址空间 31
2.9.2 非统一内存 31
2.9.3 内存对齐 31
2.10 练习 32
第3章 目标文件 35
3.1 目标文件中有什么 35
3.2 空目标文件格式:MS-DOS的.COM文件 36
3.3 代码分段:UNIX的a.out文件 36
3.3.1 a.out文件头 37
3.3.2 与虚拟内存的交互 38
3.4 重定位:MS-DOS的EXE文件 41
3.5 符号和重定位 43
3.6 可重定位的a.out格式 43
3.6.1 重定位项 44
3.6.2 符号和字符串 44
3.6.3 a.out格式小结 45
3.7 UNIX ELF格式 45
3.7.1 可重定位文件 47
3.7.2 ELF可执行文件 51
3.7.3 ELF格式小结 52
3.8 IBM 360目标文件格式 52
3.8.1 ESD记录 53
3.8.2 TXT记录 54
3.8.3 RLD记录 54
3.8.4 END记录 55
3.8.5 小结 55
3.9 微软的可移植可执行文件格式 55
3.9.1 PE特有区段 59
3.9.2 运行PE可执行文件 60
3.9.3 PE和COFF 61
3.9.4 PE文件小结 61
3.10 Intel/Microsoft的OMF文件格式 61
3.10.1 OMF记录 62
3.10.2 OMF文件的细节 63
3.10.3 OMF格式小结 65
3.11 不同目标文件格式的比较 65
3.12 练习 66
3.13 项目 66
第4章 存储空间管理 69
4.1 段和地址 69
4.2 简单的存储布局 69
4.3 多种类型的段 70
4.4 段与页面的对齐 72
4.5 公共块和其他特殊段 72
4.5.1 公共块 72
4.5.2 C++重复代码消除 73
4.5.3 初始化和终结 75
4.5.4 IBM伪寄存器 76
4.5.5 专用链接表 78
4.5.6 x86的存储分配策略 78
4.6 链接器控制脚本 79
4.7 嵌入式系统的存储分配 81
4.8 实际使用的存储分配策略 81
4.8.1 UNIX a.out链接器的存储分配策略 81
4.8.2 ELF文件中的存储分配策略 82
4.8.3 Windows链接器的存储分配策略 83
4.9 练习 84
4.10 项目 85
第5章 符号管理 87
5.1 符号名绑定和解析 87
5.2 符号表的格式 87
5.2.1 模块表 89
5.2.2 全局符号表 90
5.2.3 符号解析 91
5.2.4 特殊符号 91
5.3 名称修改 92
5.3.1 简单的C和Fortran名称修改 92
5.3.2 C++类型编码:类型和范围 93
5.3.3 链接时类型检查 95
5.4 弱外部符号和其他类型的符号 95
5.5 维护调试信息 96
5.5.1 行号信息 96
5.5.2 符号和变量信息 96
5.5.3 实际的问题 97
5.6 练习 98
5.7 项目 98
第6章 库 99
6.1 库的目的 99
6.2 库的格式 99
6.2.1 使用操作系统 99
6.2.2 UNIX和Windows的归档文件 100
6.2.3 扩展到64位 102
6.2.4 Intel OMF库文件 102
6.3 创建库文件 103
6.4 搜索库文件 104
6.5 性能问题 105
6.6 弱外部符号 105
6.7 练习 106
6.8 项目 106
第7章 重定位 109
7.1 硬件和软件重定位 109
7.2 链接时重定位和加载时重定位 110
7.3 符号重定位和段重定位 110
7.4 基本的重定位技术 111
7.4.1 指令重定位 112
7.4.2 ECOFF段重定位 114
7.4.3 ELF重定位 115
7.4.4 OMF重定位 116
7.5 可重链接和可重定位的输出格式 116
7.6 重定位项的其他格式 117
7.6.1 以链表形式组织的引用 117
7.6.2 以位图形式组织的引用 117
7.6.3 特殊段 117
7.7 特殊情况的重定位 118
7.8 练习 118
7.9 项目 119
第8章 加载和覆盖 121
8.1 基本的加载过程 121
8.2 带重定位的基本加载过程 122
8.3 位置无关代码 122
8.3.1 TSS/360的位置无关代码 123
8.3.2 为每个例程建立的指针表 123
8.3.3 目录表 123
8.3.4 ELF的位置无关代码 124
8.3.5 位置无关代码的开销和收益 126
8.4 自举加载 127
8.5 基于树状结构的覆盖技术 128
8.5.1 定义覆盖技术 129
8.5.2 覆盖技术的实现 131
8.5.3 覆盖技术的其他细节 132
8.5.4 覆盖技术小结 132
8.6 练习 133
8.7 项目 133
第9章 共享库 135
9.1 绑定时间 136
9.2 实际使用的共享库 136
9.3 地址空间管理 137
9.4 共享库的结构 138
9.5 创建共享库 138
9.5.1 创建跳转表 139
9.5.2 创建共享库 139
9.5.3 创建占位符库 139
9.5.4 版本命名 140
9.6 链接时使用共享库 141
9.7 运行时使用共享库 141
9.8 malloc的处理以及其他共享库问题 142
9.9 练习 144
9.10 项目 144
第10章 动态链接和加载 147
10.1 ELF动态链接 147
10.2 ELF文件的内容 147
10.3 加载动态链接的程序 150
10.3.1 启动动态链接器 150
10.3.2 库的查找 150
10.3.3 共享库的初始化 151
10.4 基于PLT的延迟过程链接 152
10.5 动态链接的其他特性 153
10.5.1 静态初始化 153
10.5.2 库的版本 153
10.6 运行时的动态链接 154
10.7 Microsoft动态链接库 154
10.7.1 PE文件中的导入符号和导出符号 155
10.7.2 延迟绑定 157
10.7.3 DLL库和线程 157
10.8 OSF/1伪静态共享库 158
10.9 让共享库快一些 158
10.10 几种动态链接方法的比较 159
10.11 练习 160
10.12 项目 161
第11章 高级技术 163
11.1 C++的链接技术 163
11.1.1 试错式链接 164
11.1.2 消除重复代码 165
11.1.3 基于数据库的方法 166
11.2 增量链接和重链接 166
11.3 链接时的垃圾收集 167
11.4 链接时优化 168
11.5 链接时代码生成 169
11.5.1 链接时采样和插桩 170
11.5.2 链接时汇编 170
11.5.3 加载时代码生成 170
11.6 Java的链接模式 171
11.7 练习 174
11.8 项目 174
参考文献 175