首页 文章

对象文件/可执行文件:段和段之间有什么区别?

提问于
浏览
1

我很困惑于在引用目标文件/可执行文件时“segment”和“section”之间是否存在差异 .

根据https://en.wikipedia.org/wiki/Object_file

大多数目标文件格式都是单独的数据部分,每个部分都包含某种类型的数据 .

然而,该文章后来继续谈论 segments (例如代码段,数据段等) .

此外,PE文件格式(Windows中的.exe / .dll / .coff)将这些不同的部分称为 sectionshttps://msdn.microsoft.com/en-us/library/windows/desktop/ms680547(v=vs.85).aspx) .

所以我的问题是:两者之间是否存在差异,或者它们是否几乎是同义词?

1 回答

  • 0

    术语可能取决于特定的目标文件格式,但通常一个部分是一个比细分更细粒度的代码或数据,因为一个部分可能包含多个部分 .

    例如,PE/COFF standard document没有段的概念 - 只有段,而ELF object format都有段 . 在ELF的情况下,目标文件中的段类似于CPU或指令集体系结构(例如x86)的上下文中的段 - 也就是说,段是具有特定集合的一些连续内存分区 . 与之关联的内存访问权限(或类似) . 典型示例是可执行的"code segments" vs不可执行的"data segments" .

    另一方面,部分更多地与代码或数据在目标文件中的逻辑组织方式有关 . 例如,导出符号表可能存储在与应用程序执行期间访问的数据分开的部分中,尽管两者都被视为数据 .

    如果目标文件格式具有段和段的概念,则每个段通常完全包含在单个段中(至少在ELF的情况下) .

相关问题