塑封消毒 正版书 套装书为一本
¥ 15.2 2.2折 ¥ 69 九品
仅1件
作者[美]米兰·斯特瓦诺维奇(Milan Stevanovic) 著;卢誉声 译
出版社机械工业出版社
出版时间2015-05
版次1
装帧平装
货号加油I
上书时间2024-12-15
《C/C++技术丛书:高级C/C++编译技术》从多个角度全面、系统地讲解多任务操作系统中编译、链接、装载与库的内幕和技术细节,为深入理解和掌握系统底层技术提供翔实参考和实践指南。和纯粹讲解理论与技术细节的书不同,本书一方面对基本的理论进行了阐述,另一方面则聚焦于C/C++使用静态库和动态库的一些注意事项,并举例说明如何解决实际的链接与装载问题。此外,本书尽量使用通俗易懂的语言来阐述这些知识,并补充了大量示例,避免让读者整天纠结于枯燥的理论。
《C/C++技术丛书:高级C/C++编译技术》共14章,其中第1章至第4章对多任务操作系统、程序生命周期以及代码重用等重要概念进行介绍,为后续内容做铺垫;第5章介绍静态库的使用方法及其设计技巧;第6章至第11章介绍动态库的相关概念,包括不同平台中动态库的技术细节,比如库文件定位、引用解析与符号处理等,以及一些动态库设计的基本方法与原则和不同平台下应当注意的设计细节;第12章至第14章主要给出一些实践方面的总结,便于读者快速查找相关的概念,而且还总结了一些特定平台的二进制文件分析工具。
MilanStevanovic,资深软件顾问,在多个学科的工程领域都有着丰富的经验。他主要从事的领域是Linux和Windows平台下的多媒体压缩格式及其多媒体框架设计。他热衷于开源,而且是avxsynth开源项目的主要贡献者,对C/C++底层技术有着深入的研究。
卢誉声,软件工程师,现就职于思科系统(中国)研发中心云产品研发部。他曾参与服务器后端、前端以及SDK的设计与研发工作,在分布式系统设计与实现、性能调优、高可用性和自动化等方面积累了丰富的敏捷实践与开发经验。此外,他还从事C/C++设计与研发工作,对JavaScript、Lua和移动开发平台等也有一定研究。
译者序
前言
第1章多任务操作系统基础
1.1一些有用的抽象概念
1.2存储器层次结构与缓存策略
1.3虚拟内存
1.4虚拟地址
1.5进程的内存划分方案
1.6二进制文件、编译器、链接器与装载器的作用
1.7小结
第2章程序生命周期阶段基础
2.1基本假设
2.2编写代码
2.3编译阶段
2.3.1基本概念
2.3.2相关概念
2.3.3编译的各个阶段
2.3.4目标文件属性
2.3.5编译过程的局限性
2.4链接
2.4.1链接阶段
2.4.2链接器视角
2.5可执行文件属性
2.5.1各种节的类型
2.5.2各种符号类型
第3章加载程序执行阶段
3.1shell的重要性
3.2内核的作用
3.3装载器的作用
3.3.1装载器视角下的二进制文件(节与段)
3.3.2程序加载阶段
3.4程序执行入口点
3.4.1装载器查找入口点
3.4.2_start()函数的作用
3.4.3__libc_start_main()函数的作用
3.4.4栈和调用惯例
第4章重用概念的作用
4.1静态库
4.2动态库
4.2.1动态库和共享库
4.2.2动态链接详解
4.2.3Windows平台中动态链接的特点
4.2.4动态库的特点
4.2.5应用程序二进制接口(ABI)
4.3静态库和动态库对比
4.3.1导入选择条件的差异
4.3.2部署难题
4.4一些有用的类比
4.5结论:二进制复用概念所产生的影响
第5章使用静态库
5.1创建静态库
5.1.1创建Linux静态库
5.1.2创建Windows静态库
5.2使用静态库
5.3静态库设计技巧
5.3.1丢失符号可见性和唯一性的可能性
5.3.2静态库使用禁忌
5.3.3静态库链接的具体规则
5.3.4将静态库转换成动态库
5.3.5静态库在64位Linux平台上的问题
第6章设计动态链接库:基础篇
6.1创建动态链接库
6.1.1在Linux中创建动态库
6.1.2在Windows中创建动态链接库
6.2设计动态库
6.2.1设计二进制接口
6.2.2设计应用程序的二进制接口
6.2.3控制动态库符号的可见性
6.2.4完成链接需要满足的条件
6.3动态链接模式
6.3.1加载时动态链接
6.3.2运行时动态链接
6.3.3比较两种动态链接模式
第7章定位库文件
7.1典型用例场景
7.1.1开发用例场景
7.1.2用户运行时用例场景
7.2构建过程中库文件的定位规则
7.2.1Linux平台构建过程中的库文件定位规则
7.2.2Windows构建过程中的库文件定位规则
7.3运行时动态库文件的定位规则
7.3.1Linux运行时动态库文件的定位规则
7.3.2Windows运行时动态库文件的定位规则
7.4示例:Linux构建时与运行时的库文件定位
第8章动态库的设计:进阶篇
8.1解析内存地址的必要性
8.2引用解析中的常见问题
8.3地址转换引发的问题
8.3.1情景1:客户二进制程序需要知道动态库符号地址
8.3.2情景2:被装载的库不需要知道其自身符号地址
8.4链接器-装载器协作
8.4.1总体策略
8.4.2具体技术
8.4.3链接器重定位提示概述
8.5链接器-装载器协作实现技术
8.5.1装载时重定位(LTR)
8.5.2位置无关代码(PIC)
第9章动态链接时的重复符号处理
9.1重复的符号定义
9.2重复符号的默认处理
9.3在动态库链接过程中处理重复符号
9.3.1处理重复符号问题的一般策略
9.3.2链接器解析动态库重复符号的模糊算法准则
9.4特定重复名称案例分析
9.4.1案例1:客户二进制文件符号与动态库ABI函数冲突
9.4.2案例2:不同动态库的ABI符号冲突
9.4.3案例3:动态库ABI符号和另一个动态库局部符号冲突
9.4.4案例4:两个未导出的动态库符号冲突
9.5小提示:链接并不提供任何类型的命名空间继承
第10章动态库的版本控制
10.1主次版本号与向后兼容性
10.1.1主版本号变更
10.1.2次版本号变更
10.1.3修订版本号
10.2Linux动态库版本控制方案
10.2.1基于soname的版本控制方案
10.2.2基于符号的版本控制方案
10.3Windows动态库版本控制
10.3.1DLL版本信息
10.3.2指定DLL版本信息
10.3.3查询并获取DLL版本信息
第11章动态库:其他主题
11.1插件
11.1.1导出规则
11.1.2一些流行的插件架构
11.2提示和技巧
11.2.1使用动态库的实际意义
11.2.2其他主题
第12章Linux工具集
12.1快速查看工具
12.1.1file实用程序
12.1.2size实用程序
12.2详细信息分析工具
12.2.1ldd
12.2.2nm
12.2.3objdump
12.2.4readelf
12.3部署阶段工具
12.3.1chrpath
12.3.2patchelf
12.3.3strip
12.3.4ldconfig
12.4运行时分析工具
12.4.1strace
12.4.2addr2line
12.4.3gdb(GNU调试器)
12.5静态库工具
第13章平台实践
13.1链接过程调试
13.2确定二进制文件类型
13.3确定二进制文件入口点
13.3.1获取可执行文件入口点
13.3.2获取动态库入口点
13.4列出符号信息
13.5查看节的信息
13.5.1列出所有节的信息
13.5.2查看节的信息
13.6查看段的信息
13.7反汇编代码
13.7.1反汇编二进制文件
13.7.2反汇编正在运行的进程
13.8判断是否为调试构建
13.9查看加载时依赖项
13.10查看装载器可以找到的库文件
13.11查看运行时动态链接的库文件
13.11.1strace实用程序
13.11.2LD_DEBUG环境变量
13.11.3/proc/
/maps文件
13.11.4lsof实用程序
13.11.5通过编程方式查看
13.12创建和维护静态库
第14章Windows工具集
14.1库管理器(lib.exe)
14.1.1使用lib.exe处理静态库
14.1.2使用lib.exe处理动态库(导入库生成工具)
14.2dumpbin实用程序
14.2.1确定二进制文件类型
14.2.2查看DLL的导出符号
14.2.3查看节的信息
14.2.4反汇编代码
14.2.5确定是否使用了调试模式构建
14.2.6查看加载时依赖项
14.3DependencyWalker工具
— 没有更多了 —
以下为对购买帮助不大的评价