剖析链接、装载与库,提升程序员的自我修养

程序员的修养

一、基本信息
【书名】
程序员的自我修养——链接、装载与库
【作者】俞甲子 石凡 潘爱民
【出版社】电子工业出版社
【书号】978-7-121-08511-6
【上市日期】2009年4月
【开本】16开
【版次】1-1
【定价】65.00元

二、内容简介
本书主要介绍系统软件的运行机制和原理,涉及在Windows和Linux两个系统平台上,一个应用程序在编译、链接和运行时刻所发生的各种事项,包括:代码指令是如何保存的,库文件如何与应用程序代码静态链接,应用程序如何被装载到内存中并开始运行,动态链接如何实现,C/C++运行库的工作原理,以及操作系统提供的系统服务是如何被调用的。每个技术专题都配备了大量图、表和代码实例,力求将复杂的机制以简洁的形式表达出来。本书最后还提供了一个小巧且跨平台的C/C++运行库MiniCRT,综合展示了与运行库相关的各种技术。
本书对装载、链接和库进行了深入浅出的剖析,并且辅以大量的例子和图表,可以作为计算机软件专业和其他相关专业大学本科高年级学生深入学习系统软件的参考书。同时,还可作为各行业从事软件开发的工程师、研究人员以及其他对系统软件实现机制和技术感兴趣者的自学教材。

三、本书目录
第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

四、作者序(潘爱民)

五、点击预定

posted @ 2009-04-15 18:45  博文视点  阅读(661)  评论(0编辑  收藏  举报