gpt4 book ai didi

windows - 二进制文件(PE/COFF 和 ELF)格式和术语的说明

转载 作者:IT王子 更新时间:2023-10-29 00:27:05 25 4
gpt4 key购买 nike

我在术语上很少混淆。

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 & COFF 规范”中得到这个

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

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

This chapter describes the object file format, called ELF (Executable and Linking Format). There are three main types of object files.

  • A relocatable file holds code and data suitable for linking with otherobject files to create an executableor a shared object file.

  • An executable file holds a program suitable for execution; thefile specifies how exec(BA_OS) createsa program's process image.

  • A shared object file holds code and data suitable for linking in twocontexts. First, the link editor [seeld(BA_OS)] processes the shared objectfile with other relocatable and sharedobject files to create another objectfile. Second, the dynamic linkercombines it with an executable fileand other shared objects to create aprocess image.

矛盾的是,他说目标文件和图像文件都是 ELF 格式,他根本没有区分目标文件和图像文件,而是通常将它们称为目标文件。是不是错了?

Q3. 我知道PE是从COFF派生出来的。但是微软的PE格式规范为什么叫Microsoft Portable Executable "and Common Object File Format Specification"。他们还支持 COFF 吗?如果是,在哪个操作系统中?我以为PE早就完全取代了COFF。

最佳答案

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

这是“一般”使用的术语。

  • 作为链接器输入(汇编器输出)的文件称为目标文件可重定位文件

  • 链接器生成一个图像文件,该文件又被加载器用作输入。现在,图像文件 可以是可执行文件库文件。这些“库文件”有两种:

    1. 静态库(Windows 为 *.lib 文件。Linux 为 *.a)
    2. 共享/动态库:DLL(Windows 上为 *.dll)& 共享对象文件(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

正如我所说,这些是“一般”使用的术语。术语“二进制文件”、“图像文件”或“目标文件”没有严格的定义。

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

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

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

I know that PE is derived from COFF. But why does the Microsoft specifications of PE format is named Microsoft Portable Executable "and Common Object File Format Specification". Do they still support COFF? If they, in which OS? I thought PE completely replaced COFF long ago.

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

关于windows - 二进制文件(PE/COFF 和 ELF)格式和术语的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2170818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com