目标代码
播报上传视频
由机器代码或接近于机器语言的代码组成的代码
目标代码(object code)指计算机科学中编译器或汇编器处理源代码后所生成的代码,它一般由机器代码或接近于机器语言的代码组成。目标文件(object file)即存放目标代码的计算机文件,它常被称作二进制文件(binaries)。目标文件包含着机器代码(可直接被计算机中央处理器执行)以及代码在运行时使用的数据,如重定位信息,如用于链接或调试的程序符号(变量和函数的名字),此外还包括其他调试信息。[2]目标文件是从源代码文件产生程序文件这一过程的中间产物,链接器正是通过把目标文件链接在一起来生成可执行文件或库文件。目标文件中唯一的要素是机器代码,例如,用于嵌入式系统的目标文件可能仅仅含有机器代码。
目标代码通常采用三种形式:机器语言,汇编语言,待装配机器语言模块。
生成目标代码时应着重考虑的问题: (1)如何使生成的目标代码较短; (2)如何充分利用寄存器,以减少访问内存次数; (3)如何充分利用指仅系统的的特点。
目标文件格式有许多不同的种类。最初每种类型计算机都拥有自身独特的格式,但随着Unix和其他可移植操作系统的问世,人们定义了例如COFF和ELF这些格式,并在不同的系统上使用它们。通常,链接器的输入和输出使用相同的文件格式,库文件和可执行文件格式也是一样使用相同的格式。
设计或选择一种目标文件格式是计算系统整体设计的关键部分。它影响着链接器的性能并因此影响着程序员在开发时的总耗时;如果格式是用于可执行文件,那么格式的设计还会影响程序的开始运行花费的时间,以及影响到系统对用户请求的反应速度。大部分目标文件格式以区块的方式来组织,每一区块中都装载着同种数据。在虚拟内存系统需要这些块的时候,它可以通过将这些块分页后调入,无需进一步处理就可使用。
最简单的目标文件格式是DOS的COM文件格式,它是一种仅仅由原始数据组成的文件。COM格式的文件始终被加载到某固定位置。其他的格式都由一组复杂精密的数据结构序列组成,这些格式的规范说明书一般会有许多页。
调试信息可以是目标文件格式中的一个组成部分,就像COFF中的那样,或是一种可能被数个目标格式使用的半独立格式,如stabs或DWARF。
1. 符号起始区域(BSSBlockStartedbySymbol的缩写);
3.数据段(datasegment)。
- DOS [1]
- COM
- EXE(MZ)
- 可重定位目标模块格式(Relocatable Object Module Format 一般称作“OBJ文件”或“OMF”,也在微软视窗操作系统中被一些开发工具厂商所使用)
- 嵌入式系统
- IEEE-695
- S-records
- Macintosh
- PEF/CFM
- Unix
- ECOFF(Mips)
- XCOFF(AIX)
- a.out(Unix/Linux)
- COFF(System V)
- 可执行与可链接格式(System V缩写为ELF,用于大多数现代计算系统中)
- Mach-O(NeXT,Mac OS X)
- 视窗(Windows)
- 16位的New Executable
- Portable Executable
- 其他
- IBM 360目标格式
- NetWare可加载模块(NetWareLoadableModule 缩写为NLM)
- OMF(VME)
- SOM(HP)
- XBE(Xbox的可执行文件格式)
- APP(Symbian OS的可执行文件格式)
- 可重定位动态目标文件格式(RelocatableDynamicObjectFileFormat 缩写为RDOFF)
- Hunk(AmigaOS)
