linux,windows 可执行文件(ELF、PE)

如今PC平台流行的可执行文件格式(Executable)主要是Windows下的PE(Portable Executable)和Linux的ELF(Executable Linkable Format),它们都是COFF(Common file format)格式的变种。
不光是可执行文件(Windows的.exe和Linux下的ELF可执行文件)按照可执行文件格式存储。动态连接库(DLL,Dynamic Linking Library)(Windows的.dll和Linux的.so)及静态连接库(Static Linking Library)(Windows的.lib和Linux的.a)文件都按照可执行文件格式存储。它们在Windows下都按照PE-COFF格式存储,Linux下按照ELF格式存储。
什么又是COFF格式呢?
COFF是由Unix System V Release 3首先提出而且使用的格式规范,后来微软公司基于COFF格式,制定了PE格式标准,并将其用于当时的Windows NT系统。System V Release 4在COFF的基础上引入了ELF格式,目前流行的Linux系统也以ELF做为基本可执行文件格式。这也就是为何目前PE和ELF如此类似的主要缘由,由于它们都是源于同一种可执行文件格式COFF。
bash

Unix最先的可执行文件格式为a.out格式,它的设计很是地简单,以致于后来共享库这个概念出现的时候,a.out格式就变得捉襟见肘了。因而人们设计了COFF格式来解决这些问题,这个设计很是通用,以致于COFF的继承者到目前还在被普遍地使用。编辑器

COFF的主要贡献是在目标文件里面引入了“段”的机制,不一样的目标文件能够拥有不一样数量及不一样类型的“段”。另外,它还定义了调试数据格式。spa

 

目标文件有三种类型:
1. 可重定位文件(Relocatable File) 包含适合于与其余目标文件连接来建立可执行文件或者共享目标文件的代码和数据。 (Linux的*.o 文件 Windows的 *.obj文件)
2. 可执行文件(Executable File) 包含适合于执行的一个程序,此文件规定了 exec() 如何建立一个程序的进程映像。(好比/bin/bash文件;Windows的*.exe)
3. 共享目标文件(Shared Object File) 包含可在两种上下文中连接的代码和数据。首先连接编辑器能够将它和其它可重定位文件和共享目标文件一块儿处理,生成另一个目标文件。其次,动态连接器(Dynamic Linker)可能将它与某个可执行文件以及其它共享目标一块儿组合,建立进程映像。
目标文件所有是程序的二进制表示,目的是直接在某种处理器上直接执行(Linux的.so,如/lib/ glibc-2.5.so;Windows的DLL
设计

相关文章
相关标签/搜索