linux,windows可执⾏⽂件(ELF、PE)
linux怎么读取windows文件现在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。
Unix最早的可执⾏⽂件格式为a.out格式,它的设计⾮常地简单,以⾄于后来共享库这个概念出现的时候,a.out格式就变得捉襟见肘了。于是⼈们设计了COFF格式来解决这些问题,这个设计⾮常通⽤,以⾄于COFF的继承者到⽬前还在被⼴泛地使⽤。
COFF的主要贡献是在⽬标⽂件⾥⾯引⼊了“段”的机制,不同的⽬标⽂件可以拥有不同数量及不同类型的“段”。另外,它还定义了调试数据格式。
⽬标⽂件有三种类型:
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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。