作者:陆麟
转载请征得作者同意.
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