我对这些术语感到有些困惑。
输入链接器的文件称为目标文件,链接器生成的映像文件被加载器用作输入。
这段内容来自于《MS PE & COFF规范》。
问题1:映像文件也称为二进制映像
、二进制文件
或者只是二进制
。对吗?
问题2:根据上述术语,PE/ELF/COFF是映像文件的格式,而不是目标文件的格式,对吗?但http://www.sco.com/developers/gabi/latest/ch4.intro.html中写道:
本章介绍了名为 ELF(可执行和链接格式)的目标文件格式。有三种主要类型的目标文件。
可重定位文件包含适合与其他目标文件链接以创建可执行文件或共享对象文件的代码和数据。
可执行文件包含适合执行的程序;该文件指定了如何通过exec(BA_OS)创建程序的过程图像。
共享对象文件包含适合在两个上下文中链接的代码和数据。首先,链接编辑器[参见ld(BA_OS)]将共享对象文件与其他可重定位和共享对象文件一起处理以创建另一个目标文件。其次,动态链接器将其与可执行文件和其他共享对象组合以创建进程图像。
他矛盾地说,目标文件和映像文件都是 ELF 格式,并且根本没有区分目标文件和映像文件,而是通常将它们称为目标文件。这不对吗?
问题3. 我知道PE格式是从COFF演变而来的。但为什么微软的PE格式规范被命名为“Microsoft Portable Executable and Common Object File Format Specification”?他们是否还支持COFF?如果支持,是在哪个操作系统上?我以为很久以前PE就完全替代了COFF。
答:尽管PE是从COFF演变而来的,但是微软将PE规范命名为“Microsoft Portable Executable and Common Object File Format Specification”,并不意味着他们不再支持COFF。实际上,微软仍然支持COFF,并且它被广泛用于Windows操作系统中的静态库和驱动程序等方面。 PE已经成为Windows操作系统中可执行文件和动态链接库的标准格式,同时也支持32位和64位平台。因此,虽然PE已经取代了COFF作为Windows中应用程序的主要格式,但COFF仍然被用于某些特定领域。
VA&RVA
的另一个问题是https://dev59.com/p3I95IYBdhLWcg3wvwsQ - claws