Linux系统下ELF可执行文件的装载与执行
本文内容参考自《程序员的自我修养——链接、装载与库》
首先想和大家探讨几个问题,说一下自己的看法。
1.有没有必要读Linux源码?
个人看法:如果是早期0.11、0.12……这种版本,可以彻底研读,如果是2.6、3.0、4.0,那还是算了把。学好操作系统原理,然后动手实现这些原理,那么就够了,如果有机会做到内核开发的工作,再具体深入。
2. 程序员的自我修养中,有没有必要所有知识点都深入学习?
个人看法:有些知识点可能在自己的工作中压根用不到,此时只需要知道大体把整体衔接起来即可,如果需要用到,再深 入。 举个例子:对于很多程序员来说,知道main函数之前发生了什么没有任何意义。
目标文件链接为可执行文件图解:
注:该图中段的个数、段与段之间的顺序可能和实际的有出入,在此只是为了说明原理,指出比较重要的地方。
Linux装载ELF文件和执行过程:
ELF文件和虚拟空间的映射图:
注:section和segment都译为 “段”,但是两者是不同的,segment是众多section的集合。