PE文件格式(2)
2007-01-14 20:15:04 来源:WEB开发网核心提示: IMAGE_EXPORT_DIRECTORYSTRUCTCharacteristicsDWORD?TimeDateStampDWORD?MajorVersionWORD?MinorVersionWORD?nNameDWORD?nBaseDWORD?NumberOfFunctionsDWOR
IMAGE_EXPORT_DIRECTORYSTRUCT
Characteristics DWORD ?
TimeDateStamp DWORD ?
MajorVersion WORD ?
MinorVersion WORD ?
nName DWORD ?
nBase DWORD ?
NumberOfFunctions DWORD ?
NumberOfNames DWORD ?
AddressOfFunctions DWORD ?
AddressOfNames DWORD ?
AddressOfNameOrdinals DWORD ?
IMAGE_EXPORT_DIRECTORYENDS
输出表结构('IMAGE_EXPORT_DIRECTORY')包含一个头和输出数据,即符号名,序号及到入口点的偏移。
首先,是一个32位的'Characteristics',一般为0。然后是32位的'TimeDateStamp',输出表创建的时间,并非总是有效的,有些链接器置0。然后是2个16位的版本信息MajorVersion和MinorVersion,一般置0.
下面是32位的'Name',这是一个指向以0结尾的字符串的RVA,名字是必须的,防止DLL文件改名。
然后是32位的'Base'.下一个是32位的输出项目总数'NumberOfFunctions'.除了序数外,也可能以名字输出。下面一个是32位的输出名字的总数'NumberOfNames'.在多数情况,每个输出项有一个确切的名字,将以名字使用它。但一个项目可能有多个名字,或者没有名字,这种情况只能够以序号来访问,不赞成只以序号输出,带来维护问题。
下面32位是AddressOfFunctions,是输出项目列表的RVA,它指向具有'NumberOfFunctions'个数元素的数组。每个成员是输出函数或变量的RVA。该列表有两个怪事,输出的RVA可能是0,他没有被使用。第二如果RVA指向包含输出目录的节,这是一个转发输出。转发输出是一个指向另一个文件输出的指针。这样就使用另一个文件内的被指向的输出。输出序号是AddressOfFunctions数组的索引+上面提到的BASE值。多数情况下,'Base'=1,意思是第一个输出的序号为1,第二个是2。
更多精彩
赞助商链接