我很困惑在引用目标文件/可执行文件时“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)。
所以我的问题是:两者之间是否存在差异,或者它们实际上是同义词吗?
答案 0 :(得分:0)
术语可能取决于特定的目标文件格式,但通常部分是更细粒度的" chunk"代码或数据而不是段,从某种意义上说,一个段可能包含多个部分。
例如,PE/COFF standard document没有段的概念 - 只有部分,而ELF object format都有。在ELF的情况下,目标文件中的段类似于CPU或指令集体系结构(例如x86)的上下文中的段 - 也就是说,段是具有特定集合的一些连续内存分区。与之关联的内存访问权限(或类似)。典型的例子是可执行的"代码段" vs不可执行的"数据段"。
另一方面,部分更多地与代码或数据在目标文件中的逻辑组织方式有关。例如,导出符号表可能存储在与应用程序执行期间访问的数据分开的部分中,尽管两者都被视为数据。
如果目标文件格式具有段和段的概念,则每个段通常完全包含在单个段中(至少ELF就是这种情况)。