【问题标题】:ELF - what's the purpose o the sh_offset field?ELF - sh_offset 字段的用途是什么?
【发布时间】:2018-05-20 06:29:24
【问题描述】:

我正在尝试了解有关 ELF 格式的更多信息,尤其是节标题,我只是 came across 以下内容:

Elf32_Ehdr *ehdr = (Elf32_Ehdr*)p;
Elf32_Shdr *shdr = (Elf32_Shdr *)(p + ehdr->e_shoff);
int shnum = ehdr->e_shnum;

Elf32_Shdr *sh_strtab = &shdr[ehdr->e_shstrndx];
const char *const sh_strtab_p = p + sh_strtab->sh_offset;

for (int i = 0; i < shnum; ++i) {
   printf("%2d: %4d '%s'\n", i, shdr[i].sh_name,
          sh_strtab_p + shdr[i].sh_name);
}

 return 0;
}

现在,我知道这基本上是遍历节表并打印节名,但我仍然对 sh_offset 字段感到困惑。它究竟是做什么的?如果 e_shstrndx 已经指向字符串表部分,为什么我们需要 sh_offset

【问题讨论】:

    标签: elf


    【解决方案1】:

    如果 e_shstrndx 已经指向字符串表部分,为什么我们需要 sh_offset

    e_shstrndx节表的索引;它会告诉您哪个部分描述(包含)字符串表。

    但它并没有告诉你数据(字符串本身)在哪里。为此,您需要sh_offset

    这是picture.e_shoff 告诉您分区表从哪里开始,.e_shstrndx 告诉您该表的哪个元素是您想要的那个元素,那个元素的 .sh_offset 告诉您在文件中的位置.shstrtab部分的 data 是(即字符串本身所在的位置)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      相关资源
      最近更新 更多