ELF中程序头和节头之间的区别

时间:2014-04-30 04:48:16

标签: c arm gnu elf linker-scripts

Q1 ELF中程序头和节头之间的区别是什么

Q1.1段和段之间有什么区别?

我相信pheaders只指向部分。

Q2。什么是文件头和程序头之间的区别

根据gnu ld链接描述文件Using Id: The GNU Linker

PHDRS
{
name type [ FILEHDR ] [ PHDRS ] [ AT ( address ) ]
[ FLAGS ( flags ) ] ;
}

您可以在程序标题类型后面使用FILEHDR和PHDRS关键字进一步显示 描述细分的内容。 FILEHDR关键字表示该段应包含 ELF le标题。 PHDRS关键字表示该段应包含ELF程序 标题本身

This is a bit confusing

1 个答案:

答案 0 :(得分:16)

Executable & Linkable Format wikipage 有一个很好的图片解释ELF,以及它的程序标题和部分标题。另请参阅elf(5)

[initial]程序头定义了address space(可执行的观点点){{3}中投影的段{(在运行该ELF可执行文件的processvirtual memory中) }} 时间。 [final]部分标题是定义部分(可链接的观点,execve(2)等...)。每个部分属于一个段(并且可以或不可见 - 在执行时映射到存储器中)。 ELF文件头告诉程序头表和表的位置。节头表是。

还可以使用ld(1)objdump(1)来探索Linux系统上现有的几个ELF文件(可执行文件,共享对象,可链接对象)。

莱文的readelf(1)书有一章详细解释。

Drepper的论文Linkers & Loaders也有一些很好的解释。