我在术语上很少混淆。
作为链接器输入的文件称为对象文件。 链接器生成图像文件,然后由加载器用作输入。
我从“MS PE& COFF规范”中得到了这个
Q1。图片文件也称为Binary Image
,Binary File
或Binary
。对?
Q2。因此,根据上述术语,PE / ELF / COFF是图像文件&的格式。不是对象文件。对吗?但是http://www.sco.com/developers/gabi/latest/ch4.intro.html说
矛盾的是他说对象文件和图像文件是ELF格式&他完全没有区分对象与对象。图像文件,但通常将它们称为对象文件。不是吗?本章介绍目标文件格式,称为ELF(可执行文件和链接格式)。目标文件有三种主要类型。
可重定位文件包含适合与其他文件链接的代码和数据 目标文件来创建可执行文件 或共享对象文件。
可执行文件包含适合执行的程序;该 file指定exec(BA_OS)如何创建 程序的过程映像。
共享对象文件包含适合链接的代码和数据 上下文。首先,链接编辑器[见 ld(BA_OS)]处理共享对象 文件与其他可重定位和共享 目标文件来创建另一个对象 文件。第二,动态链接器 将它与可执行文件相结合 和其他共享对象来创建 过程形象。
Q3。我知道PE来自COFF。但为什么Microsoft格式的PE格式被命名为 Microsoft Portable Executable“和Common Object File Format Specification”。他们还支持COFF吗?如果他们,在哪个操作系统?我以为PE很久以前就完全取代了COFF。
答案 0 :(得分:14)
我是OP。每个人的答案都是部分答案。所以,我将所有其他答案与我学到的答案结合起来。
这是“一般”使用的术语。
作为链接器输入的文件(汇编程序的输出)称为Object File
或Relocatable File
。
链接器生成Image file
,然后由加载器用作输入。现在,Image file
可以是Executable file
或Library file
。这些“图书馆文件”有两种:
DLL
(* .dll on windows)& Shared Object file
(Linux中的* .so)术语Binary File
/ Binary
可用于指代ObjectFile或ImageFile。取决于具体情况而不同。这是一个非常笼统的术语。
将图像文件加载到内存时的加载程序。然后它被称为Module
(我不确定Linux的人,但是Windows家伙称之为Module
http://www.gliffy.com/pubdoc/1978433/L.jpg alt text http://www.gliffy.com/pubdoc/1978433/L.jpg
正如我所说,这些是“一般”使用的术语。术语“二进制文件”,“图像文件”或“目标文件”没有严格的定义。
特别是术语“目标文件”有时可能用于表示编译器输出的中间文件以供链接器使用,但在另一个上下文中可能意味着可执行文件。
特别是在不同的平台上,它们可能用于指代不同或类似的东西。即使在单个平台上讨论问题时,一个作者也可能使用这些术语与另一个作者有所不同。
e_type
;这个字段让我们知道文件是一个目标文件(也就是ELF用语中的可重定位),还是一个图像(可以是可执行文件或共享对象)或其他东西(核心文件也是ELF文件)。我知道PE来自COFF。 但为什么是微软呢 PE格式的规格命名 Microsoft Portable Executable“和 通用目标文件格式 规范“。他们仍然支持 COFF?如果他们,在哪个操作系统?我想 PE很久以前完全取代了COFF。
就“PE”与“COFF”而言,我的回忆是微软使用“COFF”规范作为“PE”规范的起点,但扩展了它的需求。严格来说,“PE”文件不是“COFF”文件,但它在很多方面非常相似。
答案 1 :(得分:2)
术语“二进制文件”,“图像文件”或“目标文件”没有严格的定义。
特别是术语“目标文件”有时可能用于表示编译器输出的中间文件以供链接器使用,但在另一个上下文中可能意味着可执行文件。
特别是在不同的平台上,它们可能用于指代不同或类似的东西。即使在单个平台上讨论问题时,一个作者也可能使用这些术语与另一个作者有所不同。
就“PE”与“COFF”而言,我的回忆是微软使用“COFF”规范作为“PE”规范的起点,但扩展了它的需求。严格来说,“PE”文件不是“COFF”文件,但它在很多方面非常相似。
答案 2 :(得分:1)
gcc -c将在Linux系统上生成一个.o文件,它是一个elf格式的目标文件。 “ELF 32位LSB可重定位,Intel 80386,版本1(SYSV)”是我的机器上的文件命令描述.o文件的方式。
答案 3 :(得分:1)
关于ELF的Q2,ELF不仅是图像文件的格式,而且也目标文件的格式。
每个ELF文件都以ELF Header开头。 ELF标题的第二个字段是e_type
;这个字段让我们知道文件是一个目标文件(也就是ELF用语中的可重定位),一个图像(可以是一个可执行文件或一个共享对象)或其他东西(核心文件也是ELF文件)。
答案 4 :(得分:0)
顺便说一句,我知道Solaris上的核心转储(我猜其他Unix风格)可能是ELF格式。