【发布时间】: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