
作者:俞甲子,石凡,潘爱民著
页数:459
出版社:电子工业出版社
出版日期:2009
ISBN:9787121085116
电子书格式:pdf/epub/txt
目录
第1 部分 简介 ……………………………………………………………………………… 1
第1 章 温故而知新 ……………………………………………………………………………………………………. 3
1.1 从HELLO WORLD 说起 ……………………………………………………………………………………. 4
1.2 万变不离其宗 …………………………………………………………………………………………………………. 5
1.3 站得高,望得远 ……………………………………………………………………………………………………… 8
1.4 操作系统做什么 ……………………………………………………………………………………………………. 10
1.5 内存不够怎么办 ……………………………………………………………………………………………………. 14
1.6 众人拾柴火焰高 ……………………………………………………………………………………………………. 19
1.7 本章小结 ………………………………………………………………………………………………………………. 33
第2 部分 静态链接 ……………………………………………………………………… 35
第2 章 编译和链接 ………………………………………………………………………………………………….. 37
2.1 被隐藏了的过程 ……………………………………………………………………………………………………. 38
2.2 编译器做了什么 ……………………………………………………………………………………………………. 41
2.3 链接器年龄比编译器长 …………………………………………………………………………………………. 48
2.4 模块拼装——静态链接 …………………………………………………………………………………………. 50
2.5 本章小结 ………………………………………………………………………………………………………………. 53
第3 章 目标文件里有什么 ………………………………………………………………………………………… 55
3.1 目标文件的格式 ……………………………………………………………………………………………………. 56
3.2 目标文件是什么样的 …………………………………………………………………………………………….. 58
3.3 挖掘SIMPLESECTION.O ……………………………………………………………………………………………… 61
3.4 ELF 文件结构描述 ………………………………………………………………………………………………… 68
3.5 链接的接口——符号 ……………………………………………………………………………………………… 81
3.6 调试信息 ………………………………………………………………………………………………………………. 94
3.7 本章小结 ………………………………………………………………………………………………………………. 95
第4 章 静态链接 …………………………………………………………………………………………………….. 97
4.1 空间与地址分配 ……………………………………………………………………………………………………. 98
4.2 符号解析与重定位 ………………………………………………………………………………………………. 103
4.3 COMMON 块 ……………………………………………………………………………………………………… 111
4.4 C++相关问题 ………………………………………………………………………………………………………. 112
4.5 静态库链接 …………………………………………………………………………………………………………. 117
4.6 链接过程控制 ……………………………………………………………………………………………………… 123
4.7 BFD 库 ………………………………………………………………………………………………………………. 131
4.8 本章小结 …………………………………………………………………………………………………………….. 132
第5 章 WINDOWS PE/COFF ……………………………………………………………………………………. 133
5.1 WINDOWS 的二进制文件格式PE/COFF …………………………………………………………………. 134
5.2 PE 的前身——COFF ……………………………………………………………………………………………. 135
5.3 链接指示信息 ……………………………………………………………………………………………………… 139
5.4 调试信息 …………………………………………………………………………………………………………….. 140
5.5 大家都有符号表 ………………………………………………………………………………………………….. 141
5.6 WINDOWS 下的ELF——PE …………………………………………………………………………………… 142
5.7 本章小结 …………………………………………………………………………………………………………….. 146
第3 部分 装载与动态链接 ………………………………………………………….. 147
第6 章 可执行文件的装载与进程 …………………………………………………………………………….. 149
6.1 进程虚拟地址空间 ………………………………………………………………………………………………. 150
6.2 装载的方式 …………………………………………………………………………………………………………. 153
6.3 从操作系统角度看可执行文件的装载 ………………………………………………………………….. 157
6.4 进程虚存空间分布 ………………………………………………………………………………………………. 160
6.5 LINUX 内核装载ELF 过程简介 …………………………………………………………………………….. 173
6.6 WINDOWS PE 的装载 …………………………………………………………………………………………….. 175
6.7 本章小结 …………………………………………………………………………………………………………….. 177
第7 章 动态链接 …………………………………………………………………………………………………… 179
7.1 为什么要动态链接 ………………………………………………………………………………………………. 180
7.2 简单的动态链接例子 …………………………………………………………………………………………… 184
7.3 地址无关代码 ……………………………………………………………………………………………………… 188
7.4 延迟绑定(PLT) ……………………………………………………………………………………………….. 200
7.5 动态链接相关结构 ………………………………………………………………………………………………. 202
7.6 动态链接的步骤和实现 ……………………………………………………………………………………….. 214
7.7 显式运行时链接 ………………………………………………………………………………………………….. 221
7.8 本章小结 …………………………………………………………………………………………………………….. 228
第8 章 LINUX 共享库的组织…………………………………………………………………………………….. 229
8.1 共享库版本 …………………………………………………………………………………………………………. 230
8.2 符号版本 …………………………………………………………………………………………………………….. 235
8.3 共享库系统路径 ………………………………………………………………………………………………….. 241
8.4 共享库查找过程 ………………………………………………………………………………………………….. 241
8.5 环境变量 …………………………………………………………………………………………………………….. 242
8.6 共享库的创建和安装 …………………………………………………………………………………………… 245
8.7 本章小结 …………………………………………………………………………………………………………….. 248
第9 章 WINDOWS 下的动态链接……………………………………………………………………………….. 249
9.1 DLL 简介 …………………………………………………………………………………………………………… 250
9.2 符号导出导入表 ………………………………………………………………………………………………….. 257
9.3 DLL 优化 ……………………………………………………………………………………………………………. 266
9.4 C++与动态链接 …………………………………………………………………………………………………. 273
9.5 DLL HELL ………………………………………………………………………………………………………….. 276
9.6 本章小结 …………………………………………………………………………………………………………….. 279
第4 部分 库与运行库 ………………………………………………………………… 281
第10 章 内存 ……………………………………………………………………………………………………….. 283
10.1 程序的内存布局 ………………………………………………………………………………………………… 284
10.2 栈与调用惯例 ……………………………………………………………………………………………………. 286
10.3 堆与内存管理 ……………………………………………………………………………………………………. 305
10.4 本章小结 …………………………………………………………………………………………………………… 315
第11 章 运行库 …………………………………………………………………………………………………….. 317
11.1 入口函数和程序初始化 ……………………………………………………………………………………… 318
11.2 C/C++运行库 …………………………………………………………………………………………………….. 335
11.3 运行库与多线程 ………………………………………………………………………………………………… 350
11.4 C++全局构造与析构 ………………………………………………………………………………………….. 357
11.5 FREAD 实现 ………………………………………………………………………………………………………….. 368
11.6 本章小结 …………………………………………………………………………………………………………… 381
第12 章 系统调用与API…………………………………………………………………………………………… 383
12.1 系统调用介绍 ……………………………………………………………………………………………………. 384
12.2 系统调用原理 ……………………………………………………………………………………………………. 388
12.3 WINDOWS API …………………………………………………………………………………………………….. 401
12.4 本章小结 …………………………………………………………………………………………………………… 410
第13 章 运行库实现 ………………………………………………………………………………………………. 411
13.1 C 语言运行库 ……………………………………………………………………………………………………. 412
13.2 如何使用MINI CRT ……………………………………………………………………………………………. 429
13.3 C++运行库实现 …………………………………………………………………………………………………. 433
13.4 如何使用MINI CRT++ ……………………………………………………………………………………….. 446
13.5 本章小结 …………………………………………………………………………………………………………… 448
附录A …………………………………………………………………………………………………………………… 449
A.1 字节序(BYTE ORDER) ………………………………………………………………………………………… 450
A.2 ELF 常见段 ………………………………………………………………………………………………………… 451
A.3 常用开发工具命令行参考 …………………………………………………………………………………… 453
索引 ……………………………………………………………………………………………………………………… 457
第1 章 温故而知新 ……………………………………………………………………………………………………. 3
1.1 从HELLO WORLD 说起 ……………………………………………………………………………………. 4
1.2 万变不离其宗 …………………………………………………………………………………………………………. 5
1.3 站得高,望得远 ……………………………………………………………………………………………………… 8
1.4 操作系统做什么 ……………………………………………………………………………………………………. 10
1.5 内存不够怎么办 ……………………………………………………………………………………………………. 14
1.6 众人拾柴火焰高 ……………………………………………………………………………………………………. 19
1.7 本章小结 ………………………………………………………………………………………………………………. 33
第2 部分 静态链接 ……………………………………………………………………… 35
第2 章 编译和链接 ………………………………………………………………………………………………….. 37
2.1 被隐藏了的过程 ……………………………………………………………………………………………………. 38
2.2 编译器做了什么 ……………………………………………………………………………………………………. 41
2.3 链接器年龄比编译器长 …………………………………………………………………………………………. 48
2.4 模块拼装——静态链接 …………………………………………………………………………………………. 50
2.5 本章小结 ………………………………………………………………………………………………………………. 53
第3 章 目标文件里有什么 ………………………………………………………………………………………… 55
3.1 目标文件的格式 ……………………………………………………………………………………………………. 56
3.2 目标文件是什么样的 …………………………………………………………………………………………….. 58
3.3 挖掘SIMPLESECTION.O ……………………………………………………………………………………………… 61
3.4 ELF 文件结构描述 ………………………………………………………………………………………………… 68
3.5 链接的接口——符号 ……………………………………………………………………………………………… 81
3.6 调试信息 ………………………………………………………………………………………………………………. 94
3.7 本章小结 ………………………………………………………………………………………………………………. 95
第4 章 静态链接 …………………………………………………………………………………………………….. 97
4.1 空间与地址分配 ……………………………………………………………………………………………………. 98
4.2 符号解析与重定位 ………………………………………………………………………………………………. 103
4.3 COMMON 块 ……………………………………………………………………………………………………… 111
4.4 C++相关问题 ………………………………………………………………………………………………………. 112
4.5 静态库链接 …………………………………………………………………………………………………………. 117
4.6 链接过程控制 ……………………………………………………………………………………………………… 123
4.7 BFD 库 ………………………………………………………………………………………………………………. 131
4.8 本章小结 …………………………………………………………………………………………………………….. 132
第5 章 WINDOWS PE/COFF ……………………………………………………………………………………. 133
5.1 WINDOWS 的二进制文件格式PE/COFF …………………………………………………………………. 134
5.2 PE 的前身——COFF ……………………………………………………………………………………………. 135
5.3 链接指示信息 ……………………………………………………………………………………………………… 139
5.4 调试信息 …………………………………………………………………………………………………………….. 140
5.5 大家都有符号表 ………………………………………………………………………………………………….. 141
5.6 WINDOWS 下的ELF——PE …………………………………………………………………………………… 142
5.7 本章小结 …………………………………………………………………………………………………………….. 146
第3 部分 装载与动态链接 ………………………………………………………….. 147
第6 章 可执行文件的装载与进程 …………………………………………………………………………….. 149
6.1 进程虚拟地址空间 ………………………………………………………………………………………………. 150
6.2 装载的方式 …………………………………………………………………………………………………………. 153
6.3 从操作系统角度看可执行文件的装载 ………………………………………………………………….. 157
6.4 进程虚存空间分布 ………………………………………………………………………………………………. 160
6.5 LINUX 内核装载ELF 过程简介 …………………………………………………………………………….. 173
6.6 WINDOWS PE 的装载 …………………………………………………………………………………………….. 175
6.7 本章小结 …………………………………………………………………………………………………………….. 177
第7 章 动态链接 …………………………………………………………………………………………………… 179
7.1 为什么要动态链接 ………………………………………………………………………………………………. 180
7.2 简单的动态链接例子 …………………………………………………………………………………………… 184
7.3 地址无关代码 ……………………………………………………………………………………………………… 188
7.4 延迟绑定(PLT) ……………………………………………………………………………………………….. 200
7.5 动态链接相关结构 ………………………………………………………………………………………………. 202
7.6 动态链接的步骤和实现 ……………………………………………………………………………………….. 214
7.7 显式运行时链接 ………………………………………………………………………………………………….. 221
7.8 本章小结 …………………………………………………………………………………………………………….. 228
第8 章 LINUX 共享库的组织…………………………………………………………………………………….. 229
8.1 共享库版本 …………………………………………………………………………………………………………. 230
8.2 符号版本 …………………………………………………………………………………………………………….. 235
8.3 共享库系统路径 ………………………………………………………………………………………………….. 241
8.4 共享库查找过程 ………………………………………………………………………………………………….. 241
8.5 环境变量 …………………………………………………………………………………………………………….. 242
8.6 共享库的创建和安装 …………………………………………………………………………………………… 245
8.7 本章小结 …………………………………………………………………………………………………………….. 248
第9 章 WINDOWS 下的动态链接……………………………………………………………………………….. 249
9.1 DLL 简介 …………………………………………………………………………………………………………… 250
9.2 符号导出导入表 ………………………………………………………………………………………………….. 257
9.3 DLL 优化 ……………………………………………………………………………………………………………. 266
9.4 C++与动态链接 …………………………………………………………………………………………………. 273
9.5 DLL HELL ………………………………………………………………………………………………………….. 276
9.6 本章小结 …………………………………………………………………………………………………………….. 279
第4 部分 库与运行库 ………………………………………………………………… 281
第10 章 内存 ……………………………………………………………………………………………………….. 283
10.1 程序的内存布局 ………………………………………………………………………………………………… 284
10.2 栈与调用惯例 ……………………………………………………………………………………………………. 286
10.3 堆与内存管理 ……………………………………………………………………………………………………. 305
10.4 本章小结 …………………………………………………………………………………………………………… 315
第11 章 运行库 …………………………………………………………………………………………………….. 317
11.1 入口函数和程序初始化 ……………………………………………………………………………………… 318
11.2 C/C++运行库 …………………………………………………………………………………………………….. 335
11.3 运行库与多线程 ………………………………………………………………………………………………… 350
11.4 C++全局构造与析构 ………………………………………………………………………………………….. 357
11.5 FREAD 实现 ………………………………………………………………………………………………………….. 368
11.6 本章小结 …………………………………………………………………………………………………………… 381
第12 章 系统调用与API…………………………………………………………………………………………… 383
12.1 系统调用介绍 ……………………………………………………………………………………………………. 384
12.2 系统调用原理 ……………………………………………………………………………………………………. 388
12.3 WINDOWS API …………………………………………………………………………………………………….. 401
12.4 本章小结 …………………………………………………………………………………………………………… 410
第13 章 运行库实现 ………………………………………………………………………………………………. 411
13.1 C 语言运行库 ……………………………………………………………………………………………………. 412
13.2 如何使用MINI CRT ……………………………………………………………………………………………. 429
13.3 C++运行库实现 …………………………………………………………………………………………………. 433
13.4 如何使用MINI CRT++ ……………………………………………………………………………………….. 446
13.5 本章小结 …………………………………………………………………………………………………………… 448
附录A …………………………………………………………………………………………………………………… 449
A.1 字节序(BYTE ORDER) ………………………………………………………………………………………… 450
A.2 ELF 常见段 ………………………………………………………………………………………………………… 451
A.3 常用开发工具命令行参考 …………………………………………………………………………………… 453
索引 ……………………………………………………………………………………………………………………… 457















