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