目标文件
2017-09-24 20:40
155 查看
目标文件从结构上讲,它是已经编译后的可执行文件格式,只是还没有经过链接的过程,其中可能有些符号或有些地址还没有被调整。其实它本身就是按照可执行文件格式存储的,只是跟真正的可执行文件在结构上稍有不同。
不光是可执行文件(Windows 的.exe和Linux下的ELF可执行文件)按照可执行文件格式存储。动态链接库(DLL,Dynamic Linking Library)(Windows的.dll和Linux的.so)及静态链接库(Static Linking Library)(Windows的.lib和Linux的.a)文件都按照可执行文件格式存储。它们在Windows下都按照PE-COFF格式存储,Linux下按照ELF格式存储。静态链接库稍有不同,它是把很多目标文件捆绑在一起形成一个文件,再加上一些索引,你可以简单地把它理解为一个包含有很多目标文件的文件包。ELF文件标准里面把系统中采用ELF格式的文件归为如下表所列举的4类。
可重定位文件(Relocatable File): 这类文件包含了代码和数据,可以被用来链接成可执行文件或共享目标文件,静态链接库也可以归为这一类。(Linux的.o 或者Windows的.obj)。
可执行文件(Executable File):这类文件包含了可以直接执行的程序,它的代表就是ELF可执行文件,它们一般都没有扩展名。比如/bin/bash文件,windows的.exe文件。
共享目标文件(Shared Object File):这种文件包含了代码和数据,可以在以下两种情况下使用。一种是链接器可以使用这种文件跟其他的可重定位文件和共享文件链接,产生新的目标文件。第二种是动态链接器可以将几个这种共享目标文件与可执行文件结合,作为进程映像的一部分来运行。
核心转储文件(Core Dump File):当进程意外终止时,系统可以将该进程的地址空间的内容及终止时的一些其他信息转储到核心转储文件。例如linux下的core dump。
我们可以在Linux下使用file命令来查看相应的文件格式,上面几种文件在file命令下会显示出相应的类型:
目标文件的格式
现在PC平台流行的可执行文件格式(Executable)主要是Windows下的PE(Portable Executable)和Linux的ELF(Executable Linkable Format),它们都是COFF(Common file format)格式的变种。目标文件就是源代码编译后但未进行链接的那些中间文件(Windows的.obj和Linux下的.o),它跟可执行文件的内容与结构很相似,所以一般跟可执行文件格式一起采用一种格式存储。从广义上看,目标文件与可执行文件的格式其实几乎是一样的,所以我们可以广义地讲目标文件与可执行文件看成是一种类型的文件,在Windows下,我们可以统称它们为PE-COFF文件格式。在Linux下,我们可以讲它们统称为ELF文件。其他不太常见的可执行文件格式还有Intel/Microsoft的OMF(Object Module Format)、Unix a.out格式和MS-DOS .COM格式等。不光是可执行文件(Windows 的.exe和Linux下的ELF可执行文件)按照可执行文件格式存储。动态链接库(DLL,Dynamic Linking Library)(Windows的.dll和Linux的.so)及静态链接库(Static Linking Library)(Windows的.lib和Linux的.a)文件都按照可执行文件格式存储。它们在Windows下都按照PE-COFF格式存储,Linux下按照ELF格式存储。静态链接库稍有不同,它是把很多目标文件捆绑在一起形成一个文件,再加上一些索引,你可以简单地把它理解为一个包含有很多目标文件的文件包。ELF文件标准里面把系统中采用ELF格式的文件归为如下表所列举的4类。
可重定位文件(Relocatable File): 这类文件包含了代码和数据,可以被用来链接成可执行文件或共享目标文件,静态链接库也可以归为这一类。(Linux的.o 或者Windows的.obj)。
可执行文件(Executable File):这类文件包含了可以直接执行的程序,它的代表就是ELF可执行文件,它们一般都没有扩展名。比如/bin/bash文件,windows的.exe文件。
共享目标文件(Shared Object File):这种文件包含了代码和数据,可以在以下两种情况下使用。一种是链接器可以使用这种文件跟其他的可重定位文件和共享文件链接,产生新的目标文件。第二种是动态链接器可以将几个这种共享目标文件与可执行文件结合,作为进程映像的一部分来运行。
核心转储文件(Core Dump File):当进程意外终止时,系统可以将该进程的地址空间的内容及终止时的一些其他信息转储到核心转储文件。例如linux下的core dump。
我们可以在Linux下使用file命令来查看相应的文件格式,上面几种文件在file命令下会显示出相应的类型:
[root@localhost study]# file main.o main.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped [root@localhost study]# file /bin/bash /bin/bash: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, strippe [root@localhost study]# file /lib/ld-2.12.so /lib/ld-2.12.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped
相关文章推荐
- Log4Net目标日志文件控制
- 《程序员的自我修养》笔记--目标文件详解
- 目标文件--以ELF文件为例对段简介
- 配置文件报错:不允许有匹配 "[xX][mM][lL]" 的处理指令目标。
- // 复制源文件内容到目标文件
- 目标文件解析
- 完成文件复制操作,在程序运行后提示输入源文件路径,然后再输入目标文件路径。
- 目标文件格式分析工具: ar,nm,objdump,objcopy,readelf
- 编译链接中的-可重定位目标文件
- 配置文件报错:不允许有匹配“[xX] [mM] [lL]”的处理指令目标。
- 源文件到目标文件的过程
- 解析目标文件
- 深入剖析之通过IAR MAP文件查看目标文件内存分配
- 在64位linux上编译曾经在32位linux编译过,含有32位目标文件的错误的解决办法
- VB6调用API打开目标文件所在文件夹且选中目标文件
- 创建快捷方式,如何保证移动目标文件后可以正常使用
- 怎样缩减xe目标文件大小
- “对于目标文件系统,目标文件过大,无法复制
- [转载]目标文件格式分析工具: ar,nm,objdump,objcopy,readelf
- pkg文件中判断目标系统的方法