下载此文档

COFF文件的格式(11页).doc


文档分类:办公文档 | 页数:约11页 举报非法文档有奖
1/11
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/11 下载此文档
文档列表 文档介绍
COFF 文件的格式 COFF –通用对象文件格式( Common Object File Format ) ,是一种很流行的对象文件格式(注意:这里不说它是“目标”文件,是为了和编译器产生的目标文件( *.o/*.obj ) 相区别, 因为这种格式不只用于目标文件, 库文件、可执行文件也经常是这种格式)。大家可能会经常使用 VC 吧?它所产生的目标文件( *.obj )就是这种格式。其它的编译器,如 GCC ( piler Collection )、 ICL ( Intel C/C++ Compiler )、 Vector C ,也使用这种格式的目标文件。不仅仅是 C/C++ ,很多其它语言也使用这种格式的对象文件。统一格式的目标文件为混合语言编程带来了极大的方便。当然,并不是只有这一种对象文件格式。常用格式的还有 OMF- 对象模型文件( Object Module File )以及 ELF- 可执行及连接文件格式( Executable and Linking Format )。 OMF 是一大群 IT 巨头在 n 年制定的一种格式,在 Windows 平台上很常见。大家喜欢的 Borland 公司现在使用的目标文件就是这种格式。 MS 和 Intel 在n 年前用的也是这种格式, 现在都改投异侧,用 COFF 格式了。 ELF 格式在非 Windows 平台上使用得比较多,在 Windows 平台基本上没见过。作为程序员,很有必要认识一下这些你经常打交道的家伙!不过这次让我介绍 COFF 先! COFF 的文件结构让我们先来看一下 COFF 文件的整体结构,看看它到底长得什么样! File Header Optional Header Section Header 1 ...... Section Header n Section Data Relocation Directives Line Numbers Symbol Table String Table COFF 文件一共有 8 种数据,自上而下分别为: 1. 文件头( File Header ) 2. 可选头( Optional Header ) 3. 段落头( Section Header ) 4. 段落数据( Section Data ) 5. 重定位表( Relocation Directives ) 6. 行号表( Line Numbers ) 7. 符号表( Symbol Table ) 8. 字符串表( String Table ) 其中,除了段落头可以有多个节(因为可以有多个段落)以外,其它的所有类型的节最多只能有一个。文件头:顾名思义,它就是 COFF 文件的头,它用来保存 COFF 文件的基本信息,如文件标识,各个表的位置等等。可选头:再顾名思义,它也是一个头,还是可选的,而且可有可无。在目标文件中,基本上都没有这个头;但在其它的文件中(如:可执行文件) 这个段用来保存在文件头中没有描述到的信息。段落头:又顾……(不顾了,再顾有人要打我了) ,这个头(怎么这么多的头啊? ! )是用来描述段落信息的,每个段落都有一个段落头来描述。段落的数目在文件头中会指出。段落数据: 这通常是 COFF 文件中最大的数据段, 每个段落真正的数据就保存在这个位置。至于怎么区分这些数据是哪个段落的, 不要问我, 去问段落头。重定位表:这个表通常只存在于目标文件中,它用来描述 COFF 文件中符号的重定位信息。至于为什么要重定位,请回家看看你的操作系统的书籍。符号表:这个表用来保存 COFF 文件中所用到的所有符号的信息,连接多个 COFF 文件时,这个表能帮助我们重定位符号。调试程序时也要用到它。字符串表: 不用我说, 大家也知道它用来保存字符串的。可是字符串保存给谁看呢?不知道了吧! ?问我啊! 符号表是以记录的形式来描述符号信息的, 但它只为符号名称留置了 8 个字符的空间, 早期的小程序还将就能行, 可在现在的程序中, 一个符号名动不动就数十个字符,8 个字符怎么能够?没办法,只好把这些名称存在字符串表中。而符号表中只记录这些字符串的位置。文件的结构大体上就是这样了。长得是丑了点,不过还算它的设计者有点远见。可扩充性设计得不错,以至于沿用至今。了解了文件的整体结构, 现在让我们来逐个段落分析它。文件头文件头,自然是从文件的 0 偏移处开始,它的结构很简单。用 C 的结构描述如下: typedef struct { unsigned short usMagic; // 魔法数字 unsigned short usNumSec; // 段落( Section )数 unsigned long ulTime; // 时间戳 unsigned long ulSymb

COFF文件的格式(11页) 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数11
  • 收藏数0 收藏
  • 顶次数0
  • 上传人yixingmaoj
  • 文件大小58 KB
  • 时间2017-02-15