ELF文件中的特殊节汇总
+以下内容摘抄自:ELF文件系列第三篇ELF文件静态结构中的节
+【附声明和链接如下】
版权声明:本文为CSDN博主「广敏」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011298001/java/article/details/84862565
在 ELF 文件中有一些特定的节是预定义好的,其内容是指令代码或者控制信息,这些节专门为操作系统使用。在构建可执行程序时,连接器(linker)可能需要把一些独立的目标文件和库文件连接在一起,在这个过程中,连接器要解析各个文件中的相互引用,调整某些目标文件中的绝对引用,并重定位指令码。每种操作系统都有自己的一套连接模型,但总的来说,不外乎静态和动态两类:
静态链接:所有的目标文件和库被静态地绑定在一起,所有的符号都被解析出来。所创建的目标文件是完整的,运行时不依赖于任何外部的库。
动态链接:所有的目标文件、系统共享资源以及共享库以动态的形式连在一起,外部库的内容没有完整地拷贝进来。如果创建的是可执行文件的话,程序在运行的时候,构建时所依赖的那些库必须在系统中能找到,把它们一并load之后,程序才能运行起来。运行期间如何解析那些动态链接进来的符号引用,不同系统有各自不同的方式。
动态链接过程所需要的信息由.dynsym、.dynstr、.interp、.hash、.dynamic、.rel、.rela、.got、.plt 等节提供。.init 和.fini 节用于进程的初始化和终止过程。
特殊节汇总表:
以点号“.”为前缀的节名字是为系统保留的。应用程序也可以构造自己的段,但最好不要取与上述系统已定义的节相同的名字,也不要取以点号开头的名字,以避免潜在的冲突。注意,目标文件中节的名字并不具有唯一性,可以存在多个相同名字的节。