关于Windows:二进制文件(PE / COFF

Clarification on Binary file (PE/COFF & ELF) formats & terminology

我对术语没什么困惑。

A file that is given as input to the linker is called Object File.
The linker produces an Image file, which in turn is used as input by the loader.

我来自" MS PE


我是OP。每个人的答案都是部分答案。因此,我将所有其他答案与我学到的答案结合起来。

这是"常规"使用的术语。

  • 作为链接器的输入(汇编器的输出)提供的文件称为Object FileRelocatable File

  • 链接器生成一个Image file,而它又被加载程序用作输入。现在,Image file可以是Executable fileLibrary file。这些"库文件"有两种:

  • 静态库(用于Windows的* .lib文件。对于Linux的* .a)
  • 共享/动态库:DLL(Windows上的* .dll)


    对于术语"二进制文件","图像文件"或"目标文件"没有严格的定义。

    特别是术语"目标文件"有时可能表示由编译器输出的中间文件,以供链接器使用,但在另一种情况下则可能表示可执行文件。

    尤其是在不同的平台上,它们可能用于指代不同或相似的事物。即使在单一平台上讨论问题时,一位作家可能也会使用与另一位作家稍有不同的术语。

    关于" PE"和" COFF",我的回忆是,Microsoft使用" COFF"规范作为" PE"规范的起点,但根据他们的需要对其进行了扩展。因此严格来说," PE"文件不是" COFF"文件,但是在许多方面都非常相似。


    关于ELF的Q2,ELF不仅是图像文件的格式,而且还是目标文件的格式。

    每个ELF文件都以ELF标头开头。 ELF标头的第二个字段是e_type;此字段使我们知道文件是对象文件(在ELF中又是可重定位的),图像(可以是可执行文件或共享对象)还是其他内容(核心文件也是ELF文件)。


    gcc -c将在Linux系统上生成一个.o文件,该文件是elf格式的目标文件。" ELF可重定位的32位LSB,英特尔80386,版本1(SYSV)"是通过我的计算机上的file命令描述.o文件的方式。


    n