程序员的自我修养—链接、装载与库
——- 2022-12-02 ——–
应该是看了4天
更像是GNU工具书,正如其副标题,事无巨细的介绍了程序链接、装载和运行库的方方面面,介绍的非常透彻。
内容包含:
- ELF结构(尤其是与链接相关的,符号表、重定位表等)
- 静态链接(怎么做的重定位与符号解析,GOT表,解决符号冲突)
- 装载的过程(VMA,页表映射,缺页中断)
- 由装载引出动态链接的概念(为什么要动态链接,地址无关代码,lazy binding,PLT,动态链接器的实现)
- Linux共享库的介绍(版本号,怎么组织的,LD_LIBRARY_PATH,LD_PRELOAD, gcc命令中的-Wl啥的作用,-lXXX相当于链接libXXXX.so.x.x.x)
- 运行库(简单介绍了_start -> _libc_start_main -> init -> main的过程)
- 介绍了如何自己实现一个运行库
如果对上述内容有不清楚的地方,或者甚至不知道我在说什么,那么这本书就可以很好的解答你的疑惑。相信我,虽然这本书是09年,但是比现在网上能搜到的绝大多数博客写的都要好。CSAPP还没看,内容应该有很大一部分的重叠,但是这本书讲的更娓娓道来。
读完此书,有一个很明显的效果就是readelf和objdump这两个工具,命令行选项了解的非常透彻了
- 这个选项是干嘛的
- 为什么需要这个选项
- 这个选项在链接和装载的过程中起到了什么作用
- 显示的内容是什么意思
- 每个字段的具体含义
- 和其他选项有什么关联
UNIX环境高级编程
—– 2023.1.5 ——-
大致翻了一遍,目前没有写这方面代码的需求,此书要配合着代码食用才能入味。
书如其名,写的就是UNIX环境下的编程方法。所以讲的就是UNIX环境下,POSIX.1标准下的各个标准库、系统调用的使用方法。
本质上是一个手册类书籍,更加详细的man手册。详细介绍了各个API的signature,参数的含义,在UNIX环境中的背景(为什么会存在该API,与UNIX的什么设计有关)