Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1774682
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: LINUX

2012-03-30 17:15:56

COFF(Common Object File Format)是在Unix上使用的可执行文件、object文件和共享库文件的格式规范。它规定了:

符号调试信息。它由程序里的函数和变量的符号(字符串)名以及用来设置断点和跟踪执行的行号信息组成。

符号名被存储在COFF符号表里。每个符号表项包含一个名字、存储类别、类型、值和段号。不超过8字符的短名字被直接存储在符号表里,更长的名字作为COFF对象末的字符串表里的一个偏移量被存储。

存 储类别(storage class)描述符号表示的类型实体,并可能包含外部变量(C_EXT)、自动(栈)变量(C_AUTO)、注册器变量(C_REG)、函数 (C_FCN)和许多其它的。符号类型(symbol type)描述了符号实体值的解释,并包含了所以C数据类型的值。

当用恰当的选项编译时,一个COFF object文件将为object文件里的代码段里的每个可能的断点包含行号信息。行号信息有两种形式:

第一种,对于代码里第个可能的断点,行号表项记录了地址和它匹配的行号。

第二种,表项标识一个函数开始的符号表项,使一个断点可以使用函数名来设置。


相对虚拟地址。当一个COFF文件被产生时,它通常不知道它会被载入到内存的哪个地方。文件第一个字节将会载入到的虚拟地址(virtual address)被称为映射基地址(image base address)。文件剩余部分不必被载入到相邻的块里,而是在不同的区域里。

不要把相对虚拟地址(Relative Virtual Address)和标准虚拟地址混淆。一个相对虚拟地址是这个文件被载入到内存的虚拟地址,减去文件映射的基地址。如果文件被逐字地从磁盘映射到内存里,那么RVA会和文件里的偏移量相同,但这很不常见。

注意RVA术语只用在映射文件里的object上。一旦载入到内存,映射基地址被增加,且原始的VA被使用。

阅读(1189) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~