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。
不过其实sh_name中存放的是index,不是字符串,这一点从sh_name是定长应该能看出来,那么index又是什么意思呢?index的含义是在string tabl总的第几个字节数。其实是这样的,所有的section name都存放在一个叫做string table的表中,index就是该section名字的第一个字符在表中的位置,名字一直到遇到一个'\0'为止结束。至于string table怎么找,还记得上一篇中提到的elf header中的e_shstrndx成员吗,它就指明了string table是在section header table中的第几个入口。
sh_offset:这个元素就指明了这个Elf32_Shdr描述的section在文件中的偏移量。
其他各个变量可以查询《Executable and Linkable Format(ELF)》这个文档。
分享到:
相关推荐
ELF文件由4部分组成,分别是ELF头(ELF header)、程序头表(Program header table)、节(Section)和节头表(Section header table)。实际上,一个文件中不一定包含全部内容,而且它们的位置也未必如同所示这样...
2.2 ELF Header 5 2.2.1 ELF Identification 6 2.2.2 机器信息 8 2.3 Sections 8 2.3.1 Section Header 9 2.3.1.1 Section类型—sh_type字段 10 2.3.1.2 sh_flags 字段 12 2.3.1.3 sh_link和sh_info字段 12 2.3.2 ...
ELF Header 5 ELF 鉴别(Identification) 8 节 11 特殊节 18 字符串表String Table 22 符号表Symbol Table 23 符号值Symbol Values 27 重定位Relocation 27 重定位类型Relocation Types 29 2. 程序装入和动态链接...
33 程序头Program Header 34 基地址Base Address 36 注释节 37 程序载入Program Loading 39 动态链接Dynamic Linking 41 动态链接器Dynamic Linker 41 动态节Dynamic Section 43 共享Object的依赖关系 47 GOT全局...
elf简单地说是由以下四部分组成的,elf文件头,program header和section header,内容。其中program header是运行时使用的,而section header并不会被加载进程序运行空间,但他们可以在编译时被指定该段的加载地址等...
ELFParser ELF 文件分析器,可以列出一个 ELF 文件的 ELF Header、 Program Header、Section Header 等信息。 FloppyWriter 用以写引导扇区,支持软盘和软盘映像。 KrnlChecker 用以检查一个 Tinix 内核加载后...
ELFParser ELF 文件分析器,可以列出一个 ELF 文件的 ELF Header、 Program Header、Section Header 等信息。 FloppyWriter 用以写引导扇区,支持软盘和软盘映像。 KrnlChecker 用以检查一个 Tinix 内核加载后...
ELFParser ELF 文件分析器,可以列出一个 ELF 文件的 ELF Header、 Program Header、Section Header 等信息。 FloppyWriter 用以写引导扇区,支持软盘和软盘映像。 KrnlChecker 用以检查一个 Tinix 内核...
ELFParser ELF 文件分析器,可以列出一个 ELF 文件的 ELF Header、 Program Header、Section Header 等信息。 FloppyWriter 用以写引导扇区,支持软盘和软盘映像。 KrnlChecker 用以检查一个 Tinix 内核加载后...
ELFParser ELF 文件分析器,可以列出一个 ELF 文件的 ELF Header、 Program Header、Section Header 等信息。 FloppyWriter 用以写引导扇区,支持软盘和软盘映像。 KrnlChecker 用以检查一个 Tinix 内核加载后...
statically linked, no section header 为什么? 我编写了一些玩具项目,这些项目生成汇编语言程序,然后将它们传递给汇编器: 该存储库中的代码是在尝试直接生成ELF二进制文件的过程中诞生的。 必要的学习过程。 ...