时隔一个月的假期(自从上一篇文章开始我就开始着手于写编译器,由于是以学习为目的,所以我自己写的编译器的数据结构和书上的完全不同,导致花费了很多时间,终于今天晚上写完了符号表的内容终于到了我的主要目的COFF文件结构)
这章主要是记录COFF文件结构的,因为PE文件结构和COFF文件结构有很多相似的地方,所以也会记录的比较详细。
概念部分的最仔细的说明:http://blog.csdn.net/diamont/article/details/4291131
这个文章很大部分内容实际上就是对这篇文章做简化解释和说明的
基本概念(名词):
属性证书:就是将一个可以用于校验的声明和映像关联器来的证书。
日期/时间戳:由于不同目的而用于PE或COFF文件中好几个地方的戳。
文件指针:某文件在被处理前的磁盘位置
映像文件:可执行文件(EXE或DLL),可以被认为是内存映像
目标文件:传入链接器进行处理的文件,链接器生成一个映像文件
RVA:相对虚拟地址,对于映像文件来说,他是某项内容被加载进内存后的地址减去映像文件地址的基地址;对于目标文件来说,因为内存的位置香味分配,所以RVA没有意义,但是RVA的节是依然保存的并且会在后面链接是重定位。
节:COFF,PE文件中代码或数据的基本单元
VA:和RVA相似,但是不减去映像文件基地址
下面是COFF文件头的标准格式:
WORD字 DWORD = double word 双字,一个字大小是两字节,也就是16位,DWORD就是4字节
typedef struct _IMAGE_FILE_HEADER
{
WORD Machine; //一个标识目标机器类型的数字
WORD NumberOfSections;