上周末到这周六,花了一周的时间看完了《CSAPP_3e》 chp07 Linking,疫情还在持续也不好出门运动,呆在家里把这周的学习做个梳理和总结。
不得不说,CSAPP这本书真的是非常之经典,不光是他的内容–计算机的底层基础知识,是每个从事计算机软件工作必须修炼的内功,对于身边的人特别是刚毕业的新人我总是不遗余力的推荐;还有就是这本书的行文结构非常符合结构化思维:为什么?是什么?怎么做?
。每章节都是如此的行文结构,真的是授之与鱼和渔。英文的行文和语法也非常工整,至少我读起来没什么困难,里面不少短语和句式我都记录了下来方便自己以后查阅使用,为此我还开了个专栏 English Mood,锻炼自己的英文写作能力。
扯多了,言归正传。
Linking这章,首先介绍了为什么要学习链接,我们能收获到什么并因此避开一些软件开发中的坑?
其次,在简单介绍了编译的大概过程后,开始分析静态链接。介绍了目标文件格式ELF,以及由此生成可执行文件的符号解析、重定位过程。
最后,分析动态链接。静态库和动态库的原理和使用,末尾介绍了个黑科技–打桩技术。
1. 编译的大概过程
我们常说的编译其实是包含了预处理、编译、汇编、链接
这四个过程的总称。拆开来讲,这四个过程都有专门的二进制可执行程序工具来执行(对应cpp、cc、as、ld),而gcc这个二进制可执行程序可以帮我们依次调用它们,我们可以使用特定的