首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对二进制文件(PE/COFF & ELF)格式和术语的澄清

对二进制文件(PE/COFF & ELF)格式和术语的澄清
EN

Stack Overflow用户
提问于 2010-01-31 06:38:23
回答 5查看 7K关注 0票数 18

我在术语上一点也不困惑。

作为链接器输入的文件称为对象文件。链接器生成一个图像文件,然后加载程序使用该文件作为输入。

我是从"MS PE & COFF规范“得到的

Q1.图像文件也称为Binary ImageBinary File或仅为Binary。对吗?

因此,根据上述术语,PE/ELF/COFF是图像文件的格式,而不是对象文件。对吗?但是http://www.sco.com/developers/gabi/latest/ch4.intro.html

本章描述对象文件格式,称为ELF (可执行和链接格式)。对象文件有三种主要类型。

  • 可重定位文件保存适于与其他对象文件链接以创建可执行文件或共享对象文件的代码和数据。
  • 可执行文件保存适合执行的程序;该文件指定exec(BA_OS)如何创建程序的进程映像。
  • 共享对象文件保存适合在两个上下文中链接的代码和数据。首先,链接编辑器(参见ld(BA_OS) )使用其他可重定位和共享的对象文件处理共享对象文件,以创建另一个对象文件。第二,动态链接器将其与可执行文件和其他共享对象组合起来,以创建进程映像。

矛盾的是,他说对象文件和图像文件都是ELF格式&他根本没有区分对象文件和图像文件,而是通常将它们称为对象文件。这不对吗?

Q3.我知道PE是从COFF派生出来的。但是为什么微软的PE格式规范被命名为“和公共对象文件格式规范”。他们还支持COFF吗?如果他们,在哪个操作系统?我以为PE很久以前就完全取代了COFF了。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-02-03 22:25:19

我是行动组。每个人的答案都是部分答案。所以,我把所有其他的答案和我学到的东西结合起来,来完成这个答案。

这是“通用”使用的术语。

  • 作为链接器输入的文件(汇编程序的输出)称为Object FileRelocatable File
  • 链接器生成一个Image file,然后加载程序将其用作输入。现在,Image file既可以是Executable file,也可以是Library file。这些“图书馆文件”有两种:
代码语言:javascript
复制
1. Static Library (\*.lib files for windows. \*.a for linux) 
2. Shared/Dynamic libraries : `DLL` ( \*.dll on windows) & `Shared Object file`( \*.so in Linux)

  • 术语Binary File / Binary可以用来指ObjectFile或ImageFile。取决于上下文。这是一个非常笼统的术语。
  • 当将图像文件加载到内存中时加载程序。然后它被称为Module (我不确定Linux的家伙,但是windows的人称之为Module

http://www.gliffy.com/pubdoc/1978433/L.jpg alt文本http://www.gliffy.com/pubdoc/1978433/L.jpg

正如我所说的,这些都是“--通常是”使用的术语。对于“二进制文件”、“图像文件”或“对象文件”,没有严格的定义。

特别是,“对象文件”一词有时可能被用来指编译器输出的中间文件,以供链接器使用,但在另一上下文中,可能是指可执行文件。

特别是在不同的平台上,它们可能被用来指不同或相似的事物。即使在一个平台上讨论问题时,一个作者使用的术语也可能与另一个不同。

  • 在linux中,ObjectFile和ImageFile都是PE格式的windows和ELF格式。
  • ELF不仅是图像文件的格式,也是对象文件的格式。
  • 每个ELF文件都以ELF头开头。ELF头的第二个字段是e_type;这个字段让我们知道该文件是一个对象文件(在ELF术语中是可重定位的),还是一个图像(可以是一个可执行文件,也可以是一个共享对象),或者其他什么东西(核心文件也是ELF文件)。
  • 我不知道头中是否有任何一点可以区分对象文件和图像文件。需要检查一下。

我知道PE是从COFF衍生出来的。但是为什么微软的PE格式规范被命名为“和公共对象文件格式规范”。他们还支持COFF吗?如果他们,在哪个操作系统?我以为PE很久以前就完全取代了COFF了。

至于"PE“和"COFF",我记得微软使用"COFF”规范作为"PE“规范的起点,但根据他们的需要进行了扩展。严格地说,"PE“文件不是"COFF”文件,但在许多方面非常相似。

票数 19
EN

Stack Overflow用户

发布于 2010-01-31 06:44:47

对于“二进制文件”、“图像文件”或“对象文件”,没有严格的定义。

特别是,“对象文件”一词有时可能被用来指编译器输出的中间文件,以供链接器使用,但在另一上下文中,可能是指可执行文件。

特别是在不同的平台上,它们可能被用来指不同或相似的事物。即使在一个平台上讨论问题时,一个作者使用的术语也可能与另一个不同。

至于"PE“和"COFF",我记得微软使用"COFF”规范作为"PE“规范的起点,但根据他们的需要进行了扩展。严格地说,"PE“文件不是"COFF”文件,但在许多方面非常相似。

票数 3
EN

Stack Overflow用户

发布于 2010-01-31 07:01:37

gcc -c将在Linux系统上生成一个.o文件,这是一个精灵格式的对象文件。"ELF 32位LSB可重定位,Intel 80386,version 1 (SYSV)“是如何用文件命令在我的机器上描述.o文件的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2170818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档