您的位置:首页 > 理论基础

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

2014-03-02 22:44 323 查看
########  该系列博文为书籍《程序员的自我修养》的笔记 ##########

【说明】

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

【段表是什么】

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

【段表内容】

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

              


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

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

             


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

            

             下面是各个成员的作用

             


              

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

              


【部分成员的具体类别】

                      1】sh_type 段的类别

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

                            可以取下面这几种值

                            


                             


                2】sh_flag 段的标志位

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

                          


 

                 3】sh_link ,  sh_info 段的链接信息

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

                            


                              

                          
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息