p150 -177
6 可执行文件的装载与进程
- readelf
-l program headers [ 装载的view ]
-S section-headers [ 链接的view ]
7 动态链接
- 静态链接 程序如果多的话 比较浪费空间 所以需要.so
- 看到了“地址无关代码” 然后就觉得暂时用不到 或者不需要了解那么深入了= =
question 看看别人笔记吧
-
第六章节看到段地址对齐 、进程栈初始化 就没看了 ,后面有空再看吧
-
p182 动态链接是怎么实现的??静态的时候,多个.o文件汇总在一起生成一个新的可执行文件,虚拟地址啥的写得明明白白,但是现在咋办,系统是咋知道有没有加载进去的???
- 还有插件,是怎么通过动态链接的这个性质搞定的啊 p 183
-
-l 就是静态链接吗
静态库和动态库都可以,以库名为math的库为例,-lmath表示库文件名是libmath.so或者libmath.a(Linux下的库文件都要以lib开头,其中.so是动态库,.a是静态库),但是如果动态库和静态库都有的情况下,优先会认为是静态库
-
.a文件和.so文件区别 .a文件就是静态链接版本的所有集合吗
.a相当于多个.o文件的集合,但是.so 不是哦!
-
为什么这里所有的都有两份啊 甚至还有三份的
这个其实就叫maps,就是某个地址的符号来源于哪里会写出来,两份或者三份是因为有多个符号来自于同一个文件罢了,他们加载进来的地址信息是不一样的。maps是很方便用于debug的,具体的原理这里就不详述了。