PE文件格式(3)
2007-01-14 20:15:00 来源:WEB开发网核心提示: IMAGE_RESOURCE_DATA_ENTRYSTRUCTOffsetToDatadd?Size1dd?CodePagedd?Reserveddd?IMAGE_RESOURCE_DATA_ENTRYENDS32位'OffsetToData'从资源节开始到原始数据的偏移量
IMAGE_RESOURCE_DATA_ENTRYSTRUCT
OffsetToDatadd?
Size1dd ?
CodePagedd ?
Reserveddd ?
IMAGE_RESOURCE_DATA_ENTRYENDS
32位'OffsetToData'从资源节开始到原始数据的偏移量,32位数据大小Size,32位'CodePage'
和32保留。
原始数据格式依赖于资源类型,任何字符串资源都是UNICODE格式。
重定位relocations
-----------
最后一个数据目录是重定位,基重定位目录被IMAGE_DIRECTORY_ENTRY_BASERELOC指向,典型的包括一个自己的节,名字是".reloc"以及IMAGE_SCN_CNT_INITIALIZED_DATA,IMAGE_SCN_MEM_DISCARDABLE和
IMAGE_SCN_MEM_READ位集合。
如果映象没有被加载器调入优先地址,则该数据被加载器使用。这种情况下给链接器填入的地址无效了。加载器必须修复用于静态变量的绝对地址,串等。
IMAGE_BASE_RELOCATIONSTRUCT
VirtualAddressdd ?
SizeOfBlockdd ?
IMAGE_BASE_RELOCATIONENDS
重定位目录是一系列块,每个块包括重定位信息针对4K的映象。一个块起始于一个
'IMAGE_BASE_RELOCATION'结构,包括32位的'VirtualAddress'和32位的'SizeOfBlock'.随后是实际的重定位数据每个都是16位的。'VirtualAddress'是本块要应用的基地址。'SizeOfBlock'是整个块的大小。后面的重定位的数目是('SizeOfBlock'-sizeof(IMAGE_BASE_RELOCATION))/2,重定位信息以VirtualAddress'=0的IMAGE_BASE_RELOCATION结构结束。
每个16位重定位信息包括低12位的重定位位置和高4位的重定位类型。要得到重定位的RVA,IMAGE_BASE_RELOCATION'的'VirtualAddress'需要加上12位位置偏移量.类型是下列之一:
更多精彩
赞助商链接