C ELF中程序标头和节标头之间的差异

C ELF中程序标头和节标头之间的差异,c,arm,gnu,elf,linker-scripts,C,Arm,Gnu,Elf,Linker Scripts,Q1 ELF中程序标题和节标题的区别是什么 Q1.1分段和分段之间的区别是什么 我相信Pheader只指向部分 问题2。文件头和程序头之间有什么区别 根据GNU ld链接器脚本: 您可以使用出现在程序头类型之后的FILEHDR和PHDRS关键字来进一步说明 描述该部分的内容。FILEHDR关键字表示该段应包括 ELF文件头。PHDRS关键字表示该段应包括ELF程序 标题本身 这有点让人困惑。维基页面有一幅很好的图片解释了ELF,以及它的程序头和节头之间的区别。另见 [initial]程序头定义了

Q1 ELF中程序标题和节标题的区别是什么

Q1.1分段和分段之间的区别是什么

我相信Pheader只指向部分

问题2。文件头和程序头之间有什么区别

根据GNU ld链接器脚本:

您可以使用出现在程序头类型之后的FILEHDR和PHDRS关键字来进一步说明 描述该部分的内容。FILEHDR关键字表示该段应包括 ELF文件头。PHDRS关键字表示该段应包括ELF程序 标题本身

这有点让人困惑。

维基页面有一幅很好的图片解释了ELF,以及它的程序头和节头之间的区别。另见

[initial]程序头定义了(运行中的ELF可执行文件)在(可执行文件角度)时投影的段。[final]sections标题用于定义节(可链接的视角等)。每个部分都属于一个段(在执行时可能可见,也可能不可见,即映射到内存中)。ELF文件头告诉程序头表和节头表的位置

还可以使用和浏览Linux系统上存在的几个ELF文件(可执行文件、共享对象、可链接对象)

莱文的书中有一章详细解释了这一点


德雷珀的论文也有一些很好的解释。

但我的答案仍然适用。请仔细阅读并遵循链接。亲爱的Basile,它并没有说太多关于程序标题的内容。我正在寻找有关PHDRS使用的详细信息{name type[FILEHDR][PHDRS][AT(address)][FLAGS(FLAGS)];}摘要:运行时和加载时。未分配部分(调试信息),BSS部分不在ELF中,但在运行时分配(空载)。类似的概念/关键词为VMA和LMA。部门与部门:
PHDRS
{
name type [ FILEHDR ] [ PHDRS ] [ AT ( address ) ]
[ FLAGS ( flags ) ] ;
}