程序编译时生成的中间代码文件。目标文件,一般是程序编译后的二进制文件,再通过链接器和资源文件链接就成可执行文件了。OBJ只给出了程序的相对地址,而可执行文件是绝对地址。
当微软开始设计
Windows NT 时,很自然的,为了最小化项目启动时间,他们会使用以前写好的并且已经测试过的工具。用这些工具生成的并且工作的可执行和 OBJ 文件格式叫做 COFF (Common Object File Format 的首字母缩写)。COFF 的相对年龄可以用八进制的域来指定。COFF 本身是一个好的起点,但是需要扩展到一个现代操作系统如
Windows 95 和
Windows NT 的需要。这个更新的结果就是(
PE文件CPU指令。重要的是操作系统的装入器和程序设计工具不需要为任何一种CPU完全重写就能达到目的。
很久之前的可执行文件结构的原理还是十分简单的。将编程语言编译成OBJ文件,再将一个个的OBJ文件连接起来,再加上资源文件,就是一个完整的可执行文件,不同语言的开发过程都差不多。典型的例子就是
Visual Basic早期系列,在编译过程中注意看目标目录,就会发现一个个OBJ文件出现然后消失。
Microsoft 抛弃现存的32位工具和可执行文件格式的事实证实了他们想让 WindowsNT 升级并且运行的更快的决心。为16位Windows编写的虚拟
设备驱动程序用一种不同的32位文件布局--LE文件格式--WindowsNT出现很早以前就存在了。比这更重要的是对 OBJ 文件的替换,在 WindowsNT 的 C编译器以前,所有的微软编译器都用 Intel 的 OMF ( Object Module Format ) 规范。就像前面提到的,Microsoft 的 Win32编译器生成 COFF 格式的 OBJ 文件。一些微软的竞争者,如 Borland 和 Symentec ,选择放弃了 COFF 格式并坚持 Intel 的 OMF文件格式。