ELF Section Header的结构

ELF Section Header的结构还是要从/usr/include/elf.h中看。

typedef struct
{
Elf32_Word sh_name; /* Section name (string tbl index) */
Elf32_Word sh_type; /* Section type */
Elf32_Word sh_flags; /* Section flags */
Elf32_Addr sh_addr; /* Section virtual addr at execution */
Elf32_Off sh_offset; /* Section file offset */
Elf32_Word sh_size; /* Section size in bytes */
Elf32_Word sh_link; /* Link to another section */
Elf32_Word sh_info; /* Additional section information */
Elf32_Word sh_addralign; /* Section alignment */
Elf32_Word sh_entsize; /* Entry size if section holds table */
} Elf32_Shdr;


同样,可以算出来Elf32_Shdr的大小是40B。其结构中的各个元素数据类型在elf.h中同样可以找到,含义见注释。整个section header table就是一个数组,数组的每一个元素就是Elf32_Shdr。Elf32_Shdr仅仅是section的一个索引,包括一些属性信息,并不是section本省。简单的介绍一下各个元素的含义。

sh_name: section name。[color=red]不过其实sh_name中存放的是index,不是字符串,这一点从sh_name是定长应该能看出来,那么index又是什么意思呢?index的含义是在string tabl总的第几个字节数。其实是这样的,所有的section name都存放在一个叫做string table的表中,index就是该section名字的第一个字符在表中的位置,名字一直到遇到一个'\0'为止结束[/color]。至于string table怎么找,还记得上一篇中提到的elf header中的e_shstrndx成员吗,它就指明了string table是在section header table中的第几个入口。
sh_offset:这个元素就指明了这个Elf32_Shdr描述的section在文件中的偏移量。

其他各个变量可以查询《Executable and Linkable Format(ELF)》这个文档。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ELF(Executable and Linkable Format)是一种用于可执行文件、共享库和目标文件的标准文件格式。下面我会用通俗易懂的例子来解释 ELF 头部(ELF Header)、程序头表(Program Header Table)和节头表(Section Header Table)。 想象一下你正在组织一场音乐会。ELF 头部就像是这场音乐会的入口处。它包含了一些重要的信息,比如文件类型、机器架构、入口点地址等。它告诉操作系统如何解释和执行这个文件。 程序头表就像是你制定的演出计划表。它列出了音乐会的各个部分,比如开场曲、主题曲、独奏等。对于可执行文件来说,程序头表描述了程序在内存中的布局,包括各个段(Segment)的起始地址、大小和访问权限等。对于共享库和目标文件来说,程序头表可能是空的或者不需要。 节头表就像是你准备的歌曲列表。它详细描述了每首歌曲的信息,比如歌曲名称、时长、风格等。对于可执行文件来说,节头表记录了各个节(Section)的起始地址、大小和属性等。节通常用于存储代码、数据和其他资源。对于共享库和目标文件来说,节头表也扮演着类似的角色。 总结一下,ELF 头部是文件的入口信息,程序头表描述了程序在内存中的布局,节头表详细描述了文件的各个部分。它们共同组成了 ELF 文件的结构,使操作系统能够正确加载和执行这些文件。希望这个例子能帮助你更好地理解 ELF 文件结构

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值