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规范。
我相信:
PT_INTERP
必须在程序头表中的PT_LOAD
之前。PT_INTERP
,而似乎不在乎[[where该条目出现在表格中。 这应该可以正常工作(但我还没有尝试过。)。>