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


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


【说明】

             前面我们介绍了文件头,里面含有大量文件的信息,其中有一个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 段的链接信息

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

                            

                              

                          

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值