Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 可执行文件ELF中的PT_INTERP段顺序_Linux_Linker_Ld_Elf - Fatal编程技术网

Linux 可执行文件ELF中的PT_INTERP段顺序

Linux 可执行文件ELF中的PT_INTERP段顺序,linux,linker,ld,elf,Linux,Linker,Ld,Elf,第2-3页的ELF规范说明了p_type=PT_INTERP的广告节目头条目 它必须位于任何可加载段条目之前 我想知道这条规则是否涉及 1) 此项在程序头表中的顺序 或2)原始内容(带实际解释器路径的字符串)在文件布局中的位置 或者两者都有 GNU链接器ld似乎遵循3)。ld生成的程序头生成PT_PHDR,然后生成PT_INTERP,然后生成PT_LOAD, 实际的解释器字符串是在程序头之后,在任何代码和数据内容之前生成的。 它还(不必要地)在带有sh_type=SHT_PROGBITS的节头中

第2-3页的ELF规范说明了p_type=PT_INTERP的广告节目头条目 它必须位于任何可加载段条目之前

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

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

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

或者两者都有

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

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

我相信:

  • 答案是1)——
    PT\u INTERP
    必须在程序头表中的
    PT\u LOAD
    s之前
  • 这一要求很可能已经过时(至少在Linux上是如此)——内核在查找
    PT_INTERP
    时会迭代所有程序头,并且似乎不关心该条目在表中的位置 在我的链接器中,我想将INTERP路径字符串与文件末尾附近的.strtab和.shstrtab内容连接起来

    那应该很好用(但我还没试过)