PE6.0格式研究 (2) SP1

作者:陆麟
转载请征得作者同意.
1999.8.11
PATCHED 8.16



今天给出PE SIGNATURE后的数据结构.那就是COFF文件头.这里有一些关键的东西.有些很简单.我加了英文注解,有些简单得连注解也不需要.
这个数据结构是我写的PE分析器的一部分,现在先拿来大家看:)我的PE分析器写到哪里,本文就写到哪里:)

typedef struct {
 WORD Machine; //Target Machine Type
 WORD NumberOfSections; //Number of Sections
 DWORD TimeDateStamp; //Creation Time
 DWORD PointerToSymbolTable; // Point to Symbol Table
 DWORD NumberOfSymbols; //Number of Symbol Table Entry
 WORD SizeOfOpitionalHeader; //
 WORD Characteristics; //
}CoffHead,*pCoffHead;

MACHINE如果是14ch,就是可以运行在INTEL386以上CPU的两进制文件.其他的似乎没什么用.如184h for alpha, 284h for alpha64,268h for motorola,1f0h for power pc...,有关该处的定义如果有人需要,问我要吧,或者自己到微软去下载.
Characteristics
IMAGE_FILE_RELOCS_STRIPPED 0x0001
Image only, Windows CE, Windows NT and above.表示本PE文件不可以重定位.
IMAGE_FILE_EXECUTABLE_IMAGE 0x0002 Image only. 表示文件可用.如果为0,一般是LINK时出问题了.
IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004 COFF 行号被删除标志.
IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008 没有符号表.
IMAGE_FILE_AGGRESSIVE_WS_TRIM 0x0010 不懂.
IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020 应用程序能处理 > 2gb 地址.该功能是从NTSP3开始被支持.因为大部分的数据库服务器需要很大的内存,而NT仅提供2G给应用程序.从NTSP3开始,通过加载/3GB参数,可以使应用程序分配到2G->3G区域的地址.而该处原先是属于系统内存区.该功能在NTSP3的MSDN版公开,但是好象其他文档里尚没有公开.
IMAGE_FILE_16BIT_MACHINE 0x0040  reserved.
IMAGE_FILE_BYTES_REVERSED_LO 0x0080 Little endian: LSB precedes MSB in memory.
IMAGE_FILE_32BIT_MACHINE 0x0100 目标平台为32位机器.
IMAGE_FILE_DEBUG_STRIPPED 0x0200 没有DEBUG信息.
IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400 如果程序在软盘上,就从SWAP区运行.
IMAGE_FILE_SYSTEM 0x1000 表明本程序是系统文件,非应用程序.
IMAGE_FILE_DLL 0x2000 映象是个DLL.
IMAGE_FILE_UP_SYSTEM_ONLY 0x4000 仅可运行在单处理器的机器上.
IMAGE_FILE_BYTES_REVERSED_HI 0x8000 Big endian: MSB precedes LSB in memory.

(此次SP1补充了上次忘记了的特征值.)