目标文件/可执行文件:段和节有什么区别?

5
我对于在涉及目标文件/可执行文件时,“segment”和“section”是否有区别感到困惑。
根据https://en.wikipedia.org/wiki/Object_file
大多数目标文件格式都被构建为不同的数据部分,每个部分包含某种类型的数据。
然而,该文章后来谈到了(例如代码段、数据段等)。
此外,在PE文件格式中(Windows中的.exe/.dll/.coff),将这些不同的部分称为部分https://msdn.microsoft.com/en-us/library/windows/desktop/ms680547(v=vs.85).aspx)。
所以我的问题是:这两者之间是否有区别,还是它们实际上是同义词?

“PE文件格式”将这些不同的部分称为“段”。我认为你可能是想说“节”,因为PE/COFF标准只涉及到“节”。 - Erlend Graff
是的,我的错。已经编辑过了。 - Dean Leitersdorf
1个回答

3
术语可能取决于特定的目标文件格式,但通常一个“section”比一个“segment”更细粒度,“chunk”的代码或数据,因为一个段可以由多个部分组成。
例如,PE/COFF 标准文档没有段的概念——只有部分,而ELF 目标格式两者都有。在 ELF 的情况下,目标文件中的段类似于 CPU 或指令集体系结构上的段,例如 x86——也就是说,一个段是一些具有特定内存访问权限(或类似权限)的连续内存分区。典型的例子是可执行的“代码段”与不可执行的“数据段”。

另一方面,章节与代码或数据在对象文件中的逻辑组织方式更相关。例如,导出符号表可能存储在与应用程序在其执行期间访问的数据不同的部分中,尽管两者都被视为数据

如果对象文件格式具有段和节的概念,则每个节通常完全包含在单个段中(至少在ELF中是这样)。


有趣 - 你知道PE的情况吗? - Dean Leitersdorf
由于PE格式只有节,链接器和加载器所需的所有元数据都包含在节内或与节相关联。对于确实具有段的目标文件格式(例如ELF),值得注意的是,所有代码/数据都是相同的--只是目标文件格式提供了两个不同的“视图”。段通常并不是严格需要的,因为所有信息也可以通过节视图获得。它们更多地涉及使加载器变得方便。 - Erlend Graff

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接