【发布时间】:2020-03-23 14:46:14
【问题描述】:
ELF 规范 http://www.skyfree.org/linux/references/ELF_Format.pdf 在第 2-3 页表示广告程序标题条目与 p_type=PT_INTERP 它必须在任何可加载的段条目之前。
我想知道这条规则是否涉及
1) 该条目在Program Header Table中的顺序,
或 2) 文件布局中原始内容(带有实际解释器路径的字符串)的位置,
或 3) 两者兼而有之。
GNU 链接器 ld 似乎遵循 3)。 ld产生的Program Header产生PT_PHDR,然后是PT_INTERP,然后是PT_LOAD, 并且实际的解释器字符串是在程序头之后,在任何代码和数据内容之前生成的。 它还(不必要地?)在 sh_type=SHT_PROGBITS 的节头中生成特殊的节条目 .interp,它与程序头条目 PT_INTERP 重复。
在我的链接器中,我想在文件末尾附近的某处将 INTERP 路径字符串与 .strtab 和 .shstrtab 内容连接起来,因为这三个部分都是字节-对齐,这将节省对齐的东西并减小输出文件的大小。 但是,我不确定这是否违反了 ELF 规范。
【问题讨论】: