可执行ELF中的PT_INTERP段顺序

问题描述 投票:0回答:1

ELF规范http://www.skyfree.org/linux/references/ELF_Format.pdf在2-3页上说,广告程序标头条目的p_type = PT_INTERP它必须在任何可加载的段条目之前

我想知道这个规则是否涉及

1)程序头表中此项的顺序,

或2)原始内容(具有实际解释器路径的字符串)在文件布局中的位置,

或3)都。

GNU链接器ld似乎遵循3)。 ld产生的程序头会生成PT_PHDR,然后是PT_INTERP,然后是PT_LOAD,并且实际的解释器字符串是在程序头之后,任何代码和数据内容之前生成的。它还(不必要地?)在sh_type = SHT_PROGBITS的节头中生成特殊节条目。interp,该节条目复制程序头条目PT_INTERP。

在我的链接器中,我想将INTERP路径字符串与文件末尾附近的。strtab。shstrtab内容连接起来,因为所有这三个部分都是字节对齐的,这样可以省去对齐填充并减小输出文件的大小。但是,我不确定这是否违反ELF规范。

linux linker ld elf
1个回答
0
投票

我相信:

  1. 答案为1)-PT_INTERP必须在程序头表中的PT_LOAD之前。
  2. 此要求很可能已经过时了(至少在Linux上如此)-内核在fs/binfmt_elf.c中的[[all程序头上迭代以寻找PT_INTERP,而似乎不在乎[[where该条目出现在表格中。
在我的链接器中,我想在文件末尾附近将INTERP路径字符串与.strtab和.shstrtab内容连接在一起
这应该可以正常工作(但我还没有尝试过。)。>
© www.soinside.com 2019 - 2024. All rights reserved.