在术语上我很困惑。
input到链接器的文件称为对象文件 。 链接器产生一个Image文件 ,这个文件又被加载器用作input。
我从“MS PE&COFF规格”
Q1。 图像文件也被称为Binary Image
, Binary File
或只是Binary
。 对?
Q2。 因此,根据上述术语,PE / ELF / COFF是图像文件的格式而不是目标文件的格式。 对? 但是http://www.sco.com/developers/gabi/latest/ch4.intro.html说
本章描述了被称为ELF(可执行和链接格式)的目标文件格式。 有三种主要types的目标文件。
可重定位文件包含适合与其他目标文件链接的代码和数据,以创build可执行文件或共享目标文件。
可执行文件保存适合于执行的程序; 该文件指定exec(BA_OS)如何创build程序的过程映像。
共享对象文件保存适合在两个上下文中链接的代码和数据。 首先,链接编辑器[见ld(BA_OS)]处理与其他可重定位和共享对象文件的共享对象文件,以创build另一个对象文件。 其次,dynamic链接器将其与可执行文件和其他共享对象结合起来以创build过程映像。
他认为Object File和Image File都是ELF格式,他完全不区分对象和图像文件,而是将它们通常称为Object文件。 是不是错了?
Q3。 我知道PE来自COFF。 但为什么PE格式的Microsoft规格被命名为Microsoft Portable Executable“和Common Object File Format Specification” 。 他们还支持COFF吗? 如果他们在哪个操作系统? 我以为PE很早就完全取代了COFF。
我是OP。 每个人的答案都是部分答案。 所以,我把所有其他的答案与我所学到的结合起来。
这是“ 一般 ”使用的术语。
输入到链接器(汇编器的输出)的Object File
称为Object File
或Relocatable File
。
链接器产生一个Image file
,这个Image file
又被加载器用作输入。 现在, Image file
可以是Executable file
或Library file
。 这些“库文件”有两种:
DLL
(Windows上的* .dll)和Shared Object file
(Linux中的* .so) 术语Binary File
/ Binary File
可以用来引用一个ObjectFile或一个ImageFile。 取决于上下文。 这是一个非常通用的术语。
加载器将图像文件加载到内存中时。 然后它被称为modulee
(我不知道Linux的家伙,但窗户家伙称之为modulee
http://img.zgserver.com/windows/L.jpg 替代文字http://img.zgserver.com/windows/L.jpg
正如我所说,这些是“ 一般 ”使用的术语。 术语“二进制文件”,“图像文件”或“目标文件”没有严格的定义。
特别是术语“目标文件”有时可以用来表示由编译器输出的供链接器使用的中间文件,但是在另一个上下文中可能意味着可执行文件。
特别是在不同的平台上,它们可能被用来指代不同或类似的东西。 即使在单个平台上讨论问题时,一个作者也许会以不同的方式使用这些术语。
e_type
; 这个字段让我们知道文件是否是一个目标文件(又名ELF术语中的可重定位文件),或者一个图像(可以是可执行文件或共享对象)或其他文件(核心文件也是ELF文件)。 我知道PE来自COFF。 但为什么PE格式的Microsoft规格被命名为Microsoft Portable Executable“和Common Object File Format Specification”。 他们还支持COFF吗? 如果他们在哪个操作系统? 我以为PE很早就完全取代了COFF。
就“PE”与“COFF”而言,我记得微软使用“COFF”规范作为“PE”规范的出发点,但根据自己的需要进行了扩展。 所以严格来说,一个“PE”文件不是一个“COFF”文件,但在很多方面非常相似。
术语“二进制文件”,“图像文件”或“目标文件”没有严格的定义。
特别是术语“目标文件”有时可以用来表示由编译器输出的供链接器使用的中间文件,但是在另一个上下文中可能意味着可执行文件。
特别是在不同的平台上,它们可能被用来指代不同或类似的东西。 即使在单个平台上讨论问题时,一个作者也许会以不同的方式使用这些术语。
就“PE”与“COFF”而言,我记得微软使用“COFF”规范作为“PE”规范的出发点,但根据自己的需要进行了扩展。 所以严格来说,一个“PE”文件不是一个“COFF”文件,但在很多方面非常相似。
gcc -c将在Linux系统上生成一个.o文件,这是一个elf格式的目标文件。 “ELF 32位LSB可重新定位,Intel 80386,版本1(SYSV)”是如何通过我的机器上的file命令描述.o文件。
对于ELF的Q2,ELF不仅是图像文件的格式,也是目标文件的格式。
每个ELF文件都以ELF标题开头 。 ELF头的第二个字段是e_type
; 这个字段让我们知道该文件是否是一个目标文件(又名ELF说法可重定位),一个图像(可以是可执行文件或共享对象)或其他东西(核心文件也是ELF文件)。
另外,我知道Solaris上的核心转储(我猜测其他Unix风格)可以是ELF格式。