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
答案 0 :(得分:16)
Executable & Linkable Format wikipage 有一个很好的图片解释ELF,以及它的程序标题和部分标题。另请参阅elf(5)
[initial]程序头定义了address space(可执行的观点点){{3}中投影的段{(在运行该ELF可执行文件的process的virtual memory中) }} 时间。 [final]部分标题是定义部分(可链接的观点,execve(2)等...)。每个部分属于一个段(并且可以或不可见 - 在执行时映射到存储器中)。 ELF文件头告诉程序头表和表的位置。节头表是。
还可以使用ld(1)和objdump(1)来探索Linux系统上现有的几个ELF文件(可执行文件,共享对象,可链接对象)。
莱文的readelf(1)书有一章详细解释。Drepper的论文Linkers & Loaders也有一些很好的解释。