本书主要介绍系统软件的运行机制和原理,涉及在Windows和Linux两个系统平台上,一个应用程序在编译、链接和运行时刻所发生的各种事项,包括:代码指令是如何保存的,库文件如何与应用程序代码静态链接,应用程序如何被装载到内存中并开始运行,动态链接如何实现,C/C++运行库的工作原理,以及操作系统提供的系统服务是如何被调用的。每个技术专题都配备了大量图、表和代码实例,力求将复杂的机制以简洁的形式表达出来。本书还提供了一个小巧且跨平台的C/C++运行库MiniCRT,综合展示了与运行库相关的各种技术。
本书对装载、链接和库进行了深入浅出的剖析,并且辅以大量的例子和图表,可以作为计算机软件专业和其他相关专业大学本科高年级学生深入学习系统软件的参考书。同时,还可作为各行业从事软件开发的工程师、研究人员以及其他对系统软件实现机制和技术感兴趣者的自学教材。
第1部分 简介
第1章 温故而知新
1.1 从HELLO WORLD 说起
1.2 万变不离其宗
1.3 站得高,望得远
1.4 操作系统做什么
1.5 内存不够怎么办
1.6 众人拾柴火焰高
1.7 本章小结
第2部分 静态链接
第2章 编译和链接
2.1 被隐藏了的过程
2.2 编译器做了什么
2.3 链接器年龄比编译器长
2.4 模块拼装——静态链接
2.5 本章小结
第3章 目标文件里有什么
3.1 目标文件的格式
3.2 目标文件是什么样的
3.3 挖掘SIMPLESECTION.O
3.4 ELF 文件结构描述
3.5 链接的接口——符号
3.6 调试信息
3.7 本章小结
第4章 静态链接
4.1 空间与地址分配
4.2 符号解析与重定位
4.3 COMMON 块
4.4 C++相关问题
4.5 静态库链接
4.6 链接过程控制
4.7 BFD 库
4.8 本章小结
第5章 WINDOWS PE/COFF
5.1 WINDOWS 的二进制文件格式PE/COFF 134
5.2 PE 的前身——COFF
5.3 链接指示信息
5.4 调试信息
5.5 大家都有符号表
5.6 WINDOWS 下的ELF——PE
5.7 本章小结
第3部分 装载与动态链接
第6章 可执行文件的装载与进程
6.1 进程虚拟地址空间
6.2 装载的方式
6.3 从操作系统角度看可执行文件的装载
6.4 进程虚存空间分布
6.5 LINUX 内核装载ELF 过程简介
6.6 WINDOWS PE 的装载
6.7 本章小结
第7章 动态链接
7.1 为什么要动态链接
7.2 简单的动态链接例子
7.3 地址无关代码
7.4 延迟绑定(PLT)
7.5 动态链接相关结构
7.6 动态链接的步骤和实现
7.7 显式运行时链接
7.8 本章小结
第8章 LINUX 共享库的组织
8.1 共享库版本
8.2 符号版本
8.3 共享库系统路径
8.4 共享库查找过程
8.5 环境变量
8.6 共享库的创建和安装
8.7 本章小结
第9章 WINDOWS 下的动态链接
9.1 DLL 简介
9.2 符号导出导入表
9.3 DLL 优化
9.4 C++与动态链接
9.5 DLL HELL
9.6 本章小结
第4部分 库与运行库
第10章 内存
10.1 程序的内存布局
10.2 栈与调用惯例
10.3 堆与内存管理
10.4 本章小结
第11章 运行库
11.1 入口函数和程序初始化
11.2 C/C++运行库
11.3 运行库与多线程
11.4 C++全局构造与析构
11.5 FREAD 实现
11.6 本章小结
第12章 系统调用与API
12.1 系统调用介绍
12.2 系统调用原理
12.3 WINDOWS API
12.4 本章小结
第13章 运行库实现
13.1 C 语言运行库
13.2 如何使用MINI CRT
13.3 C++运行库实现
13.4 如何使用MINI CRT++
13.5 本章小结
附录A
A.1 字节序(BYTE ORDER)
A.2 ELF 常见段
A.3 常用开发工具命令行参考
索引
第1部分 简介
第1章 温故而知新
1.2 万变不离其宗
计算机是个非常广泛的概念,大到占用数层楼的用于科学计算的超级计算机,小到手机上的嵌入式芯片都可以被称为计算机。虽然它们的外形、结构和性能都千差万别,但至少它们都有"计算"这个概念。在本书里面,我们将计算机的范围限定在最为流行、使用最广泛的PC机,更具体地讲是采用兼容x86指令集的32位CPU的个人计算机。原因很简单:因为笔者手上目前只有这种类型的计算机可供操作和实验,不过相信90%以上的读者也是,所以在这一点上我们很快能达成共识。其实选择具体哪种平台并不是最关键的,虽然各种平台的软硬件差别很多,但是本质上它们的基本概念和工作原理都是一样的,只要我们能够掌握一种平台上的技术,那么其他的平台都是大同小异的,很轻松地可以举一反三。所以我们相信,只有你能够深刻地理解x86平台下的系统软件背后的机理,当有24小时你需要在MIPS指令集的嵌入式平台上做开发,或者需要为64位的Windows或tinux开发应用程序的时候,你很快就能找到它们之间的相通之处。
撇开计算机硬件中纷繁复杂的各种设备、芯片及外围接口等,站在软件开发者的角度看,我们只须抓住硬件的几个关键部件。对于系统程序开发者来说,计算机多如牛毛的硬件设备中,有三个部件最为关键,它们分别是中央处理器CPU、内存和I/O控制芯片,这三个部件几乎就是计算机的核心了;对于普通应用程序开发者来说,他们似乎除了要关心CPU以外,其他的硬件细节基本不用关心,对于一些高级平台的开发者来说(如Java、.NET或脚本语言开发者),连CPU都不需要关心,因为这些平台为它们提供了一个通用的抽象的计算机,他们只要关心这个象的计算机就可以了。
……
这是一本深人阐述链接、装载和库等问题的图书,读来让人愉悦,你从巾可以清晰地了解程序的前世今生,彻底理解敲人的代码如何变成程序任系统中运行。通读本书不管对于开发还是trouble shootin9都会很有帮助。建议每一位希望从事系统开发、或希望更实务地理解操作系统和编
个人觉得真正的程序员是应该对底层底层的东西有必要的了解的,正所谓本书所强调的程序员的自我修养。若想了解程序的是怎么加载运行的,那么这本书是你所需要的!强烈推荐!
之前一路从汇编到C再到java,感觉底层的东西真的很重要很有用
我是把这本书撕开,每次看几页,在地铁上看完的。当然,只是通读,没有很认真的研究。我觉得对非计算机科班出身而从事编程的人而言,这本书值得一看。如果你对计算机有兴趣,想了解一些在运行的程序背后发生的事情。这本书可以作为一个入门,引领你去学习钻研更多的内容。
快递是我目前遇到最烂的一次,只有五六十公里的距离,竟然用了五六天,然后打电话通知态度超烂,还说我是异地卡,超出了他的服务范围。不发短信。,,,,,,,。书还行,。。。赶快换物流吧。。。。。
经典的书籍不需要解释,终于还是买了书,电子书看起来不爽
将链接编译,运行库,可执行文件等基础讲的很清楚,真不错。
C到底怎么运行、操作系统如何装载,这本书是从操作系统的角度剖析一段代码如何运行,属于硬基本功,当然啃起来很吃力,但是心里很满足
以最快的速度看完了这本书,对动态库的装载链接原理有了更深的认识,尤其是对在工作中碰到的相关问题处理起来更加得心应手。
对于程序编译、执行的内部机理进行系统的阐述,这方面的知识,之前也都是遇到各种各样的问题一点点积攒下了,但从没有过系统的整理,这书正好补上了这部分的空缺,赞一个
程序员的自我修养—链接、装载与库( 网易云风力荐:莫到用时再读书
讲道理,作者的功底真的很厉害,对链接的过程很清晰,难得的好书,对得起书名
一本非常不错的经典内功修练书籍,深入浅出,深奥难懂的知识通常都伴有一个比喻或类比来帮你加深理解,非常不错,值得拥有
对于编译,链接和加载,之前只是一知半解,看了这本书全明白了,由于其中对于动态库“全局符号介入”的问题,项目上需要注意啊!
还不错,就像弄清楚程序链接这类的问题。整本书看起来内容挺多,其实压缩下没多少。有些地方也是含糊不清或者就直接说“关于这类的问题,后面会有详细解释”,看到后面的解释其实已经跟前面的问题对不上了。不过,总的来说,书还是不错的,最好能边看边查!
一直很信赖当当的才在这里买的书,送货的速度很快,书是正品。提两个小建议 第一 书的包装实在不敢恭维 只有一个塑料袋。第二现在快递都是大爷啊 连送上楼都不行?开会呢非得下楼去取?
国内经典的计算机书籍不多,这本可谓是很有深度,尤其是对于那些喜欢钻研,喜欢了解底层的家伙来说,我阅读这本书已经是第二遍了,从电子书,到从图书馆借来的书,再到自己去买。每次读都有新的收获,尤其是边看代码,边读书。
关于书的内容就不多说了,上次在当当买书还是上大二,如今毕业都一年了,体验依旧不错,听说当当这几年发展速度一般,但这不重要,衷心希望当当能够一如既往的坚持给用户提供良好的体验,做一家经得起时间考验的企业
不错的专业书籍,活动的时候购买价格也很不错了。系统解释了程序运行的各个方面的内容,把软件和硬件的连接讲的很透彻,对程序的理解也更深了。另外,在这赞一下配送大姐,大姐很尽职,很贴心,让人心暖暖的~~赞一个
这本书把晦涩的编译,链接和库的知识做了一次成功的科普尝试,虽然是仅以windows和linux环境作为例子,基本思想是相通的,可以触类旁通。以前老看电子版,还是买本纸质正版,放到马桶边,如厕时回顾:)
大神推荐的书,虽然这本书完全不是小白(或者说刚入门的程序猿)能看懂的,但就其内容和设计各方面感觉还是很棒的,希望不久以后自己能够从这本书中学到东西。当当这次没有把书弄脏弄破挺好,希望继续保持!!!
这是一本深人阐述链接、装载和库等问题的优秀图书,读来让人愉悦,你从巾可以清晰地了解程序的前世今生,彻底理解敲人的代码如何变成程序任系统中运行。通读本书不管对于开发还是trouble shootin9都会很有帮助。
我的数据库老师在课上曾经推荐过这本书,这本书的作者我也认识,现在作者已经开了公司,干得还不错。最近重读这本书,感觉作者对连接这部分讲解的不错,但是装载处理的不是很好,可能和这部分细节不多吧
买它就是为了理解程序从编译、连接到装载运行的过程。买这本数之前也买了大名鼎鼎的《链接器和加载器》,但是说的不够详细,感觉晦涩难懂。如果想要对程序的运行机理理解的更加深入一些,这本书是不错的选择,正如书名,主要用来修炼内功。
一直没敢评,过了个暑假,看完了,觉得没有想象中的好,主要是不够深,特别是能看的出来作者很得意的那个c运行时库,写得实在是太过简单,大半儿东西感觉熟悉系统编程的人都做过。书里确实大都是现有的资料,不过有很多资料自己收集整理起来是很麻烦的,看得出作者确是用了心,下了功夫的,再考虑作者的年龄,很可贵了,自比不如啊,呵呵。嗯,本来打算给三星的,发现当当的星级代表的是喜欢与否,不是书的内容质量评级,就给四星啦,确实是挺喜欢的,呵呵。
写得非常不错,的确是一本国内不多见的优秀原创书。大家都抄来抄去,能有这么一本好书不容易,我们要爱护。我一口气读了100多页,是位年轻的作者。尽管他打着潘爱民的旗号,但是作者的探索精神,“打破砂锅纹(问)到底”的精神,都超过了潘爱民。该书适合各路人士(新手和老手)。非常希望作者能对这本书的文字和布局再仔细锤炼一下,不要赶时髦,仅保留重要的内容,以书名阐述的“修养”的严谨态度,剃除原文中那些“博克”习气的文字,文字再精炼些,修正一些编辑性错误。还有,补充书中各种论点的参考文献和阅读书目,提高可信行。那样,我觉得每位学习计算机专业的人都该在案头备这么一本书,这本书有望成长为一本该领域的圣经。各位,先睹为快!