链接器和加载器
目 录内容简介
译者序
前言
第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章 链接和加载 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
查看完整
目 录内容简介
本书讲述构建程序的关键工具——链接器和加载器,内容包括链接和加载、体系结构、目标文件、存储分配、符号管理、库、重定位、加载和覆盖、共享库、动态链接和加载、动态链接的共享库,以及着眼于成熟的现代链接器所做的一些变化;并介绍一个持续的实践项目,即使用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 练习 13
^ 收 起
前言
第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 练习 13
^ 收 起
目 录内容简介
本书讲述构建程序的关键工具——链接器和加载器,内容包括链接和加载、体系结构、目标文件、存储分配、符号管理、库、重定位、加载和覆盖、共享库、动态链接和加载、动态链接的共享库,以及着眼于成熟的现代链接器所做的一些变化;并介绍一个持续的实践项目,即使用Perl语言开发一个可用的小链接器。本书适合高校计算机相关专业的学生、实习程序员、语言设计者和开发人员阅读参考。
比价列表