图书介绍
高级C/C++编译技术PDF|Epub|txt|kindle电子书版本下载
![高级C/C++编译技术](https://www.shukui.net/cover/14/30956185.jpg)
- (美)米兰·斯特瓦诺维奇著;卢誉声译 著
- 出版社: 北京:机械工业出版社
- ISBN:9787111496182
- 出版时间:2015
- 标注页数:266页
- 文件大小:96MB
- 文件页数:281页
- 主题词:C语言-程序设计
PDF下载
下载说明
高级C/C++编译技术PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1章 多任务操作系统基础1
1.1 一些有用的抽象概念1
1.2 存储器层次结构与缓存策略2
1.3 虚拟内存3
1.4 虚拟地址5
1.5 进程的内存划分方案5
1.6 二进制文件、编译器、链接器与装载器的作用6
1.7 小结7
第2章 程序生命周期阶段基础8
2.1 基本假设8
2.2 编写代码9
2.3 编译阶段11
2.3.1 基本概念11
2.3.2 相关概念11
2.3.3 编译的各个阶段12
2.3.4 目标文件属性23
2.3.5 编译过程的局限性24
2.4 链接26
2.4.1 链接阶段26
2.4.2 链接器视角31
2.5 可执行文件属性33
2.5.1 各种节的类型34
2.5.2 各种符号类型36
第3章 加载程序执行阶段37
3.1 shell的重要性37
3.2 内核的作用39
3.3 装载器的作用39
3.3.1 装载器视角下的二进制文件(节与段)39
3.3.2 程序加载阶段40
3.4 程序执行入口点43
3.4.1 装载器查找入口点43
3.4.2 _start()函数的作用43
3.4.3 _libc_start_main()函数的作用44
3.4.4 栈和调用惯例44
第4章 重用概念的作用46
4.1 静态库46
4.2 动态库48
4.2.1 动态库和共享库49
4.2.2 动态链接详解51
4.2.3 Windows平台中动态链接的特点54
4.2.4 动态库的特点56
4.2.5 应用程序二进制接口(ABI)56
4.3 静态库和动态库对比57
4.3.1 导入选择条件的差异57
4.3.2 部署难题59
4.4 一些有用的类比61
4.5 结论:二进制复用概念所产生的影响63
第5章 使用静态库64
5.1 创建静态库64
5.1.1 创建Linux静态库64
5.1.2 创建Windows静态库65
5.2 使用静态库65
5.3 静态库设计技巧66
5.3.1 丢失符号可见性和唯一性的可能性66
5.3.2 静态库使用禁忌67
5.3.3 静态库链接的具体规则68
5.3.4 将静态库转换成动态库68
5.3.5 静态库在64位Linux平台上的问题68
第6章 设计动态链接库:基础篇70
6.1 创建动态链接库70
6.1.1 在Linux中创建动态库70
6.1.2 在Windows中创建动态链接库72
6.2 设计动态库75
6.2.1 设计二进制接口75
6.2.2 设计应用程序的二进制接口79
6.2.3 控制动态库符号的可见性82
6.2.4 完成链接需要满足的条件94
6.3 动态链接模式94
6.3.1 加载时动态链接95
6.3.2 运行时动态链接95
6.3.3 比较两种动态链接模式98
第7章 定位库文件99
7.1 典型用例场景99
7.1.1 开发用例场景99
7.1.2 用户运行时用例场景100
7.2 构建过程中库文件的定位规则101
7.2.1 Linux平台构建过程中的库文件定位规则101
7.2.2 Windows构建过程中的库文件定位规则105
7.3 运行时动态库文件的定位规则109
7.3.1 Linux运行时动态库文件的定位规则110
7.3.2 Windows运行时动态库文件的定位规则114
7.4 示例:Linux构建时与运行时的库文件定位115
第8章 动态库的设计:进阶篇119
8.1 解析内存地址的必要性119
8.2 引用解析中的常见问题120
8.3 地址转换引发的问题122
8.3.1 情景1:客户二进制程序需要知道动态库符号地址122
8.3.2 情景2:被装载的库不需要知道其自身符号地址123
8.4 链接器-装载器协作124
8.4.1 总体策略125
8.4.2 具体技术126
8.4.3 链接器重定位提示概述127
8.5 链接器-装载器协作实现技术128
8.5.1 装载时重定位(LTR)129
8.5.2 位置无关代码(PIC)129
第9章 动态链接时的重复符号处理134
9.1 重复的符号定义134
9.2 重复符号的默认处理137
9.3 在动态库链接过程中处理重复符号140
9.3.1 处理重复符号问题的一般策略142
9.3.2 链接器解析动态库重复符号的模糊算法准则143
9.4 特定重复名称案例分析144
9.4.1 案例1:客户二进制文件符号与动态库ABI函数冲突144
9.4.2 案例2:不同动态库的ABI符号冲突147
9.4.3 案例3:动态库ABI符号和另一个动态库局部符号冲突151
9.4.4 案例4:两个未导出的动态库符号冲突153
9.5 小提示:链接并不提供任何类型的命名空间继承161
第10章 动态库的版本控制162
10.1 主次版本号与向后兼容性162
10.1.1 主版本号变更162
10.1.2 次版本号变更163
10.1.3 修订版本号163
10.2 Linux动态库版本控制方案163
10.2.1 基于soname的版本控制方案163
10.2.2 基于符号的版本控制方案169
10.3 Windows动态库版本控制190
10.3.1 DLL版本信息191
10.3.2 指定DLL版本信息192
10.3.3 查询并获取DLL版本信息193
第11章 动态库:其他主题202
11.1 插件202
11.1.1 导出规则203
11.1.2 一些流行的插件架构204
11.2 提示和技巧204
11.2.1 使用动态库的实际意义204
11.2.2 其他主题205
第12章 Linux工具集211
12.1 快速查看工具211
12.1.1 file实用程序211
12.1.2 size实用程序212
12.2 详细信息分析工具212
12.2.1 ldd212
12.2.2 nm214
12.2.3 objdump215
12.2.4 readelf223
12.3 部署阶段工具229
12.3.1 chrpath229
12.3.2 patchelf230
12.3.3 strip231
12.3.4 ldconfig231
12.4 运行时分析工具232
12.4.1 strace232
12.4.2 addr21ine233
12.4.3 gdb(GNU调试器)233
12.5 静态库工具234
第13章 平台实践238
13.1 链接过程调试238
13.2 确定二进制文件类型239
13.3 确定二进制文件入口点240
13.3.1 获取可执行文件入口点240
13.3.2 获取动态库入口点240
13.4 列出符号信息241
13.5 查看节的信息242
13.5.1 列出所有节的信息242
13.5.2 查看节的信息242
13.6 查看段的信息243
13.7 反汇编代码244
13.7.1 反汇编二进制文件244
13.7.2 反汇编正在运行的进程244
13.8 判断是否为调试构建244
13.9 查看加载时依赖项245
13.10 查看装载器可以找到的库文件245
13.11 查看运行时动态链接的库文件245
13.11.1 strace实用程序245
13.11.2 LD DEBUG环境变量246
13.11.3 /proc/〈ID〉/maps文件246
13.11.4 lsof实用程序247
13.11.5 通过编程方式查看248
13.12 创建和维护静态库251
第14章 Windows工具集252
14.1 库管理器(lib.exe)252
14.1.1 使用lib.exe处理静态库253
14.1.2 使用lib.exe处理动态库(导入库生成工具)257
14.2 dumpbin实用程序258
14.2.1 确定二进制文件类型258
14.2.2 查看DLL的导出符号258
14.2.3 查看节的信息259
14.2.4 反汇编代码262
14.2.5 确定是否使用了调试模式构建263
14.2.6 查看加载时依赖项265
14.3 Dependency Walker工具265