基址重定位表
该表在一个.reloc区块内,通过数据目录表可以找到他,他的结构如下
3个成员:ViryualAddress DWORD 重定位数据开始的RVA
SizeOfBlock DWORD 重定位块的长度,-8h再/2h就是有几个重定位数据
TypeOffset WORD 重定位项数组,高4位代表类型(0无意义,3表示指向的整个地址都需要修正,10在64位中出现,表示修正整个地址)
例子
内存偏移为4000h,文件偏移为C00 大小2C,((2C-8h)/2h=12h)就是18个数据
RVA为1000h,第一个数组就是10001h,转换成文件偏移就是601h
文件601h处 看到真正需要重定位的数据是004020,用下面工具可以查出
执行PE文件前,加载程序在进行重定位的时候,会用PE文件在内存中的实际映像地址减去PE文件所要求的映像地址,得到一个差值,在根据重定位类型的不同将差值添加到相应的地址数据中