高级C/C++编译技术(典藏版)
全新正版 假一赔十 可开发票
¥
55.4
6.2折
¥
89
全新
库存19件
作者(美)米兰·斯特瓦诺维奇
出版社机械工业出版社
ISBN9787111717300
出版时间2023-01
装帧平装
开本16开
定价89元
货号1202777485
上书时间2024-12-29
商品详情
- 品相描述:全新
- 商品描述
-
目录
译者序
前言
第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.1shell的重要性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.3Windows平台中动态链接的特点54
4.2.4动态库的特点56
4.2.5应用程序二进制接口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.1Linux构建过程中的库文件定位规则101
7.2.2Windows构建过程中的库文件定位规则105
7.3运行时动态库文件的定位规则109
7.3.1Linux运行时动态库文件的定位规则110
7.3.2Windows运行时动态库文件的定位规则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装载时重定位129
8.5.2位置无关代码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.2Linux动态库版本控制方案163
10.2.1基于soname的版本控制方案163
……
内容摘要
学习如何编写C和C++代码仅仅是个开始。如果你希望从事系统底层开发工作,或想深入理解操作系统、编译器及它们之间内在的关联,成为编程专家,那么就必须充分了解编译器生成的二进制文件(目标文件、静态库、动态库和可执行文件)的作用和结构。开源已经在许多方面从根本上改变了软件的原有面貌,越来越多的系统开始采用或集成开源代码,因此对每位开发人员来说,学习和理解这些底层技术也变得十分重要。
本书深入浅出地讲解了构建过程(编译、链接)中的细节,从多个角度展示了程序与库文件或代码的集成方法,提出了面向代码重用和系统集成的软件架构设计方法,同时展示了系统开发过程中疑难问题的解决方案。另外,本书也是一本C和C++二进制文件方面的软件工程指南,涵盖中级和专家级程序员所需的各方面内容和信息。
通过阅读本书,你将学到:
构建过程(编译和链接)与装载过程的内部原理。
静态库、动态库和可执行文件的内部工作机制。
面向代码重用和系统集成的软件架构设计方法。
编译、链接与运行时问题的排查技巧。
在Linux和Windows平台下利用二进制文件分析工具进行分析的方法。
精彩内容
学习如何编写C和C++代码仅仅是个开始。如果你希望从事系统底层开发工作,或想深入理解操作系统、编译器及它们之间内在的关联,成为编程专家,那么就必须充分了解编译器生成的二进制文件(目标文件、静态库、动态库和可执行文件)的作用和结构。开源已经在许多方面从根本上改变了软件的原有面貌,越来越多的系统开始采用或集成开源代码,因此对每位开发人员来说,学习和理解这些底层技术也变得十分重要。
本书深入浅出地讲解了构建过程(编译、链接)中的细节,从多个角度展示了程序与库文件或代码的集成方法,提出了面向代码重用和系统集成的软件架构设计方法,同时展示了系统开发过程中疑难问题的解决方案。另外,本书也是一本C和C++二进制文件方面的软件工程指南,涵盖中级和专家级程序员所需的各方面内容和信息。
通过阅读本书,你将学到:
构建过程(编译和链接)与装载过程的内部原理。
静态库、动态库和可执行文件的内部工作机制。
面向代码重用和系统集成的软件架构设计方法。
编译、链接与运行时问题的排查技巧。
在Linux和Windows平台下利用二进制文件分析工具进行分析的方法。
— 没有更多了 —
以下为对购买帮助不大的评价