【静态链接】第2章---------------------目标文件(ELF格式之段表)


########  该系列博文为书籍《程序员的自我修养》的笔记 ##########


【说明】

             前面我们介绍了文件头,里面含有大量文件的信息,其中有一个e_shoff 成员,叫做段表偏移,它来指示段表在文件中的偏移值。


【段表是什么】

             我们前面看到了,ELF文件中把指令和数据分成了很多段,比如.text比如.data等等,其实还有一些辅助的段没有被显示出来,比如符号表,比如字符串表等等,而ELF文件中所有的段的信息,都会存在一个段表中,然后文件头中的e_shoff 成员来指示这个段表在哪,这样,我们得到了文件头,从文件头得到段表位置,从段表中获得段的位置,最后从段中可以找到对应数据。


【段表内容】

              我们可以利用readelf -S simp.o   来显示段表的信息,还是我们的simp.o例子,如下图

              【静态链接】第2章---------------------目标文件(ELF格式之段表)_第1张图片

             段表其实就是一个数组,而前面的数字就是这个段在段表中的下标,从图中看到,第一个项是没有被使用的,一般就是写为NULL


             我们说段表其实就是一个数组,那我们就必须关注它的每一项的具体定义,显然每一项就的记录了一个段的信息。下面就是相关定义

             【静态链接】第2章---------------------目标文件(ELF格式之段表)_第2张图片

            段表就是由上边这种结构体构成的数组。。。。。

            

             下面是各个成员的作用

             【静态链接】第2章---------------------目标文件(ELF格式之段表)_第3张图片

              

              好了,,现在,大家看到下面这张图就有中恍然大悟的赶脚了,其中的空白是因为对齐的原因。

              【静态链接】第2章---------------------目标文件(ELF格式之段表)_第4张图片



【部分成员的具体类别】

                      1】sh_type 段的类别

                            其实段名对于操作系统是没有什么意义的,它不看,操作系统在装载的时候只关注段的属性和标志

                            可以取下面这几种值

                            

                             【静态链接】第2章---------------------目标文件(ELF格式之段表)_第5张图片


                2】sh_flag 段的标志位

                           一个段可以取下面的值的或,,也就是可以同时持有下面标志中的几个

                          【静态链接】第2章---------------------目标文件(ELF格式之段表)_第6张图片

 

                 3】sh_link ,  sh_info 段的链接信息

                            如果段的类型与链接相关,比如重定位表,符号表等等,那么这两个就有意义,其他段忽视这两个

                            【静态链接】第2章---------------------目标文件(ELF格式之段表)_第7张图片

                              

                          

你可能感兴趣的:(链接与加载,学习笔记)