`
buluzhai
  • 浏览: 108116 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ELF Section Header的结构

    博客分类:
  • MTK
阅读更多
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 文件解析工具1.7

    ELF文件由4部分组成,分别是ELF头(ELF header)、程序头表(Program header table)、节(Section)和节头表(Section header table)。实际上,一个文件中不一定包含全部内容,而且它们的位置也未必如同所示这样...

    ELF中文手册

    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手册-中文版.pdf

    ELF Header 5 ELF 鉴别(Identification) 8 节 11 特殊节 18 字符串表String Table 22 符号表Symbol Table 23 符号值Symbol Values 27 重定位Relocation 27 重定位类型Relocation Types 29 2. 程序装入和动态链接...

    ELF手册-英文原版.pdf

    33 程序头Program Header 34 基地址Base Address 36 注释节 37 程序载入Program Loading 39 动态链接Dynamic Linking 41 动态链接器Dynamic Linker 41 动态节Dynamic Section 43 共享Object的依赖关系 47 GOT全局...

    linux下实现在程序运行时的函数替换(热补丁)

    elf简单地说是由以下四部分组成的,elf文件头,program header和section header,内容。其中program header是运行时使用的,而section header并不会被加载进程序运行空间,但他们可以在编译时被指定该段的加载地址等...

    自己动手写操作系统(含源代码和工具光盘)

    ELFParser ELF 文件分析器,可以列出一个 ELF 文件的 ELF Header、 Program Header、Section Header 等信息。 FloppyWriter 用以写引导扇区,支持软盘和软盘映像。 KrnlChecker 用以检查一个 Tinix 内核加载后...

    自己动手做操作系统.rar(软件、光盘、文档)

    ELFParser ELF 文件分析器,可以列出一个 ELF 文件的 ELF Header、 Program Header、Section Header 等信息。 FloppyWriter 用以写引导扇区,支持软盘和软盘映像。 KrnlChecker 用以检查一个 Tinix 内核加载后...

    自己动手做操作系统光盘.zip

    ELFParser ELF 文件分析器,可以列出一个 ELF 文件的 ELF Header、 Program Header、Section Header 等信息。 FloppyWriter 用以写引导扇区,支持软盘和软盘映像。 KrnlChecker 用以检查一个 Tinix 内核...

    自己动手写操作系统CD内容

    ELFParser ELF 文件分析器,可以列出一个 ELF 文件的 ELF Header、 Program Header、Section Header 等信息。 FloppyWriter 用以写引导扇区,支持软盘和软盘映像。 KrnlChecker 用以检查一个 Tinix 内核加载后...

    自己动手写操作系统Tools

    ELFParser ELF 文件分析器,可以列出一个 ELF 文件的 ELF Header、 Program Header、Section Header 等信息。 FloppyWriter 用以写引导扇区,支持软盘和软盘映像。 KrnlChecker 用以检查一个 Tinix 内核加载后...

    汇编程序:基本的X86-64汇编程序,用golang编写

    statically linked, no section header 为什么? 我编写了一些玩具项目,这些项目生成汇编语言程序,然后将它们传递给汇编器: 该存储库中的代码是在尝试直接生成ELF二进制文件的过程中诞生的。 必要的学习过程。 ...

Global site tag (gtag.js) - Google Analytics