zoukankan      html  css  js  c++  java
  • ELF Format 笔记(四)—— 节(Section)

    ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287

    ELF 文件可以包含很多 section,所有的 section 都在 section header table 中有对应的一项,每个 section header 都是一个 Elf32_Shdr 结构,用于描述相应 section 的信息。

    ELF Header 中的 e_shoff 给出了 section header table 在 ELF 文件中的字节偏移量,e_shentsize 指明在 section header table 中的每一项的字节大小,e_shnum 指明共有多少项。

    Elf32_Shdr 结构:

     1 typedef struct {
     2     Elf32_Word sh_name;
     3     Elf32_Word sh_type;
     4     Elf32_Word sh_flags;
     5     Elf32_Addr sh_addr;
     6     Elf32_Off  sh_offset;
     7     Elf32_Word sh_size;
     8     Elf32_Word sh_link;
     9     Elf32_Word sh_info;
    10     Elf32_Word sh_addralign;
    11     Elf32_Word sh_entsize;
    12 } Elf32_Shdr;

    sh_name:section 的名字。这里其实是一个索引,指出 section 的名字存储在 .shstrtab 的什么位置。.shstrtab是一个存储所有 section 名字的字符串表。

    sh_type:section 的类型,上一篇笔记已经学习过。

    sh_flags:通过 1-bit flag 定义一些属性。

     

    • SHF_WRITE:此 section 中包含的数据,在进程运行时可写。
    • SHF_ALLOC:此 section 在进程运行时要占用内存。

            一些控制用的 section 在进程运行时是不占用内存的,比如动态链接器可能只把 section 中的一些信息读出来,用完就拉倒了,没必要再存储到进程镜像中。

    • SHF_EXECINSTR:此 section 存储的是可执行的机器码。
    • SHF_MASKPROC:保留的,不用管。

    sh_addr:如果此 section 需要映射到进程空间,此成员指定映射的起始地址。如不需映射,此值为 0。

    sh_offset: 此 section 相对于文件开头的字节偏移量。如果 section 类型为 SHT_NOBITS,表明该 section 在文件中不占空间,这时 sh_offset 没什么用。

    sh_size:此 section 的字节大小。如果 section 类型为 SHT_NOBITS,就不用管 sh_size 了。

    不同类型的 section 中 sh_link 和 sh_info 的意义不同:

     

    基本上就是针对不同的 section 类型,分别给出字符串表、符号表等所在的 section 在 section header table 中的索引。

    sh_addralign:指明此 section 的 sh_addr 向几字节对齐,sh_addralign 应该是 2 的正整数倍。如果为 0 或 1,表明此 section 没有字节对齐约束。

    sh_entsize:有些节的内容是一张表,其中每个表项的大小固定,比如符号表。对于这种表,本成员指定其每个表项的大小。如果此值为 0,表明本 section 不好含 XX 表。

    section header table 中的索引为 0(SHN_UNDEF) 的这一项特殊,内容为:

     

  • 相关阅读:
    Delphi公用函数单元
    Delphi XE5 for Android (十一)
    Delphi XE5 for Android (十)
    Delphi XE5 for Android (九)
    Delphi XE5 for Android (八)
    Delphi XE5 for Android (七)
    Delphi XE5 for Android (五)
    Delphi XE5 for Android (四)
    Delphi XE5 for Android (三)
    Delphi XE5 for Android (二)
  • 原文地址:https://www.cnblogs.com/ilocker/p/4593768.html
Copyright © 2011-2022 走看看