PE6.0格式研究 (7)

作者:陆麟
转载请征得作者同意.
1999.9.19


今天要讲SECTION_TABLE结构了.它的结构定义为:
typedef struct {
 char Name[8];
 DWORD VirtualSize;
 DWORD VirtualAddress;
 DWORD SizeOFRawData;
 DWORD pRawData;
 DWORD pRelocations;
 DWORD pLineNumber;
 WORD NumberOfRelocations;
 WORD NumberOfLineNumbers;
 DWORD SecFlag;
}SECTION_TABLE,*pSECTION_TABLE;
在PE的可执行文件里,Name永远是小于等于8字节长的.如果名字少于8字节,后面就以0填满.如果正好名字是8字节.那么后面就连1个0也不填.紧跟VirtualSize. 在NT,9X下.有几个名字是保留的.他们的命名有关于系统将来的运作.以下是列表.
.arch    存储ALPHA架构信息.
.bss     未初始化数据
.data    初始化数据
.edata   引出函数表
.idata   引入函数表
.pdata   EXECPTION信息
.rdata   只读数据
.reloc   重定位
.rsrc    资源目录
.text    可执行代码段
.tls     局部线程存储
.xdata   EXECPTION信息
他们都对应于固定的SECTION FLAG.而且,系统的运行依赖于他们的存在或收到影响.例如TLS,TLS信息里有个有关CALLBACK的项.尽管目前没有任何编译器支持TLS的CALLBACK.但是MS还是为将来保留了TLS CALLBACK功能.
好今天先讲到这里.从下回开始要分析另外的关键数据结构:引入/引出函数表了.欢迎观赏:D