Linux 特有的 ELF 差异

定义

“第一个”程序头是指文件中偏移量最小的程序头:e_phoff。

“最后一个”程序头是指文件中偏移量最大的程序头:e_phoff + (e_phnum - 1) * sizeof(Elf_Phdr)。

PT_INTERP

第一个 PT_INTERP 程序头用于定位 ELF 解释器的文件名。其他 PT_INTERP 头将被忽略(自 Linux 2.4.11 起)。

PT_GNU_STACK

最后一个 PT_GNU_STACK 程序头定义了用户空间堆栈的可执行性(自 Linux 2.6.6 起)。其他 PT_GNU_STACK 头将被忽略。

PT_GNU_PROPERTY

ELF 解释器的最后一个 PT_GNU_PROPERTY 程序头被使用(自 Linux 5.8 起)。如果解释器没有,则使用可执行文件的最后一个 PT_GNU_PROPERTY 程序头。其他 PT_GNU_PROPERTY 头将被忽略。