图书介绍
程序员的自我修养—链接、装载与库PDF|Epub|txt|kindle电子书版本网盘下载
- 俞甲子编著 著
- 出版社: 北京:电子工业出版社
- ISBN:9787121085116
- 出版时间:2009
- 标注页数:459页
- 文件大小:50MB
- 文件页数:483页
- 主题词:程序设计
PDF下载
下载说明
程序员的自我修养—链接、装载与库PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1部分 简介1
第1章 温故而知新3
1.1 从Hello World说起4
1.2 万变不离其宗5
1.3 站得高,望得远8
1.4 操作系统做什么10
1.4.1 不要让CPU打盹10
1.4.2 设备驱动11
1.5 内存不够怎么办14
1.5.1 关于隔离15
1.5.2 分段(Segmentation)15
1.5.3 分页(Paging)17
1.6 众人拾柴火焰高19
1.6.1 线程基础19
1.6.2 线程安全24
1.6.3 多线程内部情况30
1.7 本章小结33
第2部分 静态链接35
第2章 编译和链接37
2.1 被隐藏了的过程38
2.1.1 预编译39
2.1.2 编译40
2.1.3 汇编40
2.1.4 链接41
2.2 编译器做了什么41
2.2.1 词法分析42
2.2.2 语法分析43
2.2.3 语义分析44
2.2.4 中间语言生成45
2.2.5 目标代码生成与优化47
2.3 链接器年龄比编译器长48
2.4 模块拼装——静态链接50
2.5 本章小结53
第3章 目标文件里有什么55
3.1 目标文件的格式56
3.2 目标文件是什么样的58
3.3 挖掘SimpleSection.o61
3.3.1 代码段64
3.3.2 数据段和只读数据段65
3.3.3 BSS段66
3.3.4 其他段67
3.4 ELF文件结构描述68
3.4.1 文件头69
3.4.2 段表74
3.4.3 重定位表79
3.4.4 字符串表80
3.5 链接的接口——符号81
3.5.1 ELF符号表结构82
3.5.2 特殊符号85
3.5.3 符号修饰与函数签名86
3.5.4 extern“C”90
3.5.5 弱符号与强符号92
3.6 调试信息94
3.7 本章小结95
第4章 静态链接97
4.1 空间与地址分配98
4.1.1 按序叠加98
4.1.2 相似段合并99
4.1.3 符号地址的确定103
4.2 符号解析与重定位103
4.2.1 重定位103
4.2.2 重定位表106
4.2.3 符号解析108
4.2.4 指令修正方式109
4.3 COMMON块111
4.4 C++相关问题112
4.4.1 重复代码消除113
4.4.2 全局构造与析构114
4.4.3 C++与ABI115
4.5 静态库链接117
4.6 链接过程控制123
4.6.1 链接控制脚本123
4.6.2 最“小”的程序124
4.6.3 使用ld链接脚本127
4.6.4 ld链接脚本语法简介128
4.7 BFD库131
4.8 本章小结132
第5章 Windows PE/COFF133
5.1 Windows的二进制文件格式PE/COFF134
5.2 PE的前身——COFF135
5.3 链接指示信息139
5.4 调试信息140
5.5 大家都有符号表141
5.6 Windows下的ELF——PE142
5.6.1 PE数据目录145
5.7 本章小结146
第3部分 装载与动态链接147
第6章 可执行文件的装载与进程149
6.1 进程虚拟地址空间150
6.2 装载的方式153
6.2.1 覆盖装入153
6.2.2 页映射155
6.3 从操作系统角度看可执行文件的装载157
6.3.1 进程的建立157
6.3.2 页错误159
6.4 进程虚存空间分布160
6.4.1 ELF文件链接视图和执行视图160
6.4.2 堆和栈166
6.4.3 堆的最大申请数量168
6.4.4 段地址对齐169
6.4.5 进程栈初始化171
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.3.1 固定装载地址的困扰188
7.3.2 装载时重定位189
7.3.3 地址无关代码190
7.3.4 共享模块的全局变量问题197
7.3.5 数据段地址无关性199
7.4 延迟绑定(PLT)200
7.5 动态链接相关结构202
7.5.1 “.interp”段203
7.5.2 “.dynamic”段204
7.5.3 动态符号表206
7.5.4 动态链接重定位表207
7.5.5 动态链接时进程堆栈初始化信息211
7.6 动态链接的步骤和实现214
7.6.1 动态链接器自举214
7.6.2 装载共享对象215
7.6.3 重定位和初始化218
7.6.4 Linux动态链接器实现219
7.7 显式运行时链接221
7.7.1 dlopen()222
7.7.2 dlsym()223
7.7.3 dlerror()224
7.7.4 dlclose()224
7.7.5 运行时装载的演示程序225
7.8 本章小结228
第8章 Linux共享库的组织229
8.1 共享库版本230
8.1.1 共享库兼容性230
8.1.2 共享库版本命名232
8.1.3 SO-NAME233
8.2 符号版本235
8.2.1 基于符号的版本机制236
8.2.2 Solaris中的符号版本机制237
8.2.3 Linux中的符号版本239
8.3 共享库系统路径241
8.4 共享库查找过程241
8.5 环境变量242
8.6 共享库的创建和安装245
8.6.1 共享库的创建245
8.6.2 清除符号信息246
8.6.3 共享库的安装246
8.6.4 共享库构造和析构函数247
8.6.5 共享库脚本248
8.7 本章小结248
第9章 Windows下的动态链接249
9.1 DLL简介250
9.1.1 进程地址空间和内存管理250
9.1.2 基地址和RVA251
9.1.3 DLL共享数据段251
9.1.4 DLL的简单例子251
9.1.5 创建DLL252
9.1.6 使用DLL253
9.1.7 使用模块定义文件254
9.1.8 DLL显式运行时链接256
9.2 符号导出导入表257
9.2.1 导出表257
9.2.2 EXP文件261
9.2.3 导出重定向261
9.2.4 导入表261
9.2.5 导入函数的调用265
9.3 DLL优化266
9.3.1 重定基地址(Rebasing)267
9.3.2 序号270
9.3.3 导入函数绑定271
9.4 C++与动态链接273
9.5 DLL HELL276
9.6 本章小结279
第4部分 库与运行库281
第10章 内存283
10.1 程序的内存布局284
10.2 栈与调用惯例286
10.2.1 什么是栈286
10.2.2 调用惯例293
10.2.3 函数返回值传递299
10.3 堆与内存管理305
10.3.1 什么是堆305
10.3.2 Linux进程堆管理306
10.3.3 Windows进程堆管理308
10.3.4 堆分配算法311
10.4 本章小结315
第11章 运行库317
11.1 入口函数和程序初始化318
11.1.1 程序从main开始吗318
11.1.2 入口函数如何实现319
11.1.3 运行库与I/O327
11.1.4 MSVC CRT的入口函数初始化329
11.2 C/C++运行库335
11.2.1 C语言运行库335
11.2.2 C语言标准库336
11.2.3 glibc与MSVC CRT340
11.3 运行库与多线程350
11.3.1 CRT的多线程困扰350
11.3.2 CRT改进352
11.3.3 线程局部存储实现353
11.4 C++全局构造与析构357
11.4.1 glibc全局构造与析构358
11.4.2 MSVC CRT的全局构造和析构364
11.5 fread实现368
11.5.1 缓冲369
11.5.2 fread_s370
11.5.3 fread_nolock_s371
11.5.4 _read376
11.5.5 文本换行377
11.5.6 fread回顾380
11.6 本章小结381
第12章 系统调用与API383
12.1 系统调用介绍384
12.1.1 什么是系统调用384
12.1.2 Linux系统调用385
12.1.3 系统调用的弊端387
12.2 系统调用原理388
12.2.1 特权级与中断388
12.2.2 基于int的Linux的经典系统调用实现390
12.2.3 Linux的新型系统调用机制399
12.3 Windows API401
12.3.1 Windows API概览402
12.3.2 为什么要使用Windows API404
12.3.3 API与子系统408
12.4 本章小结410
第13章 运行库实现411
13.1 C语言运行库412
13.1.1 开始413
13.1.2 堆的实现417
13.1.3 IO与文件操作420
13.1.4 字符串相关操作425
13.1.5 格式化字符串426
13.2 如何使用Mini CRT429
13.3 C++运行库实现433
13.3.1 new与delete435
13.3.2 C++全局构造与析构437
13.3.3 atexit实现439
13.3.4 入口函数修改441
13.3.5 stream与string442
13.4 如何使用Mini CRT++446
13.5 本章小结448
附录A449
A.1 字节序(Byte Order)450
A.2 ELF常见段451
A.3 常用开发工具命令行参考453
A.3.1 gcc,GCC编译器453
A.3.2 ld,GNU链接器454
A.3.3 objdump,GNU目标文件可执行文件查看器454
A.3.4 cl,MSVC编译器455
A.3.5 link,MSVC链接器455
A.3.6 dumpbin,MSVC的COFF/PE文件查看器456
索引457