PE重定位
PE重定位:向进程的虚拟内存加载PE文件(EXE\DLL\SYS)时,文件会被加载到PE头指定的ImageBase所指定的地址处。若加载DLL或SYS时,指定位置已经被占用,就会将其加载到其他未被占用的空间。
PE重定位操作原理
PE重定位的基本操作原理:
- 在应用程序中查找硬编码的地址位置
- 读取值后,减去ImageBase
- 加上实际加载地址
基址重定位表
- 用于查找硬编码的地址位置
- 位于PE头的DataDirectory数组的第六个元素
IMAGE_BASE_RELOCATION结构体
typedef struct _IMAGE_BASE_RELOCATION{
DWORD VirtualAddress; //基准地址
DWORD SizeOfBlock; //重定位块的大小
DWORD TypeOffset[1];
} IMAGE_BASE_RELOCATION;
typedef IMAGE_BASE_RELOCATION UNALIGNED * PIMAGE_BASE_RELOCATION;
计算
【
V
i
r
t
u
a
l
A
d
d
r
e
s
s
+
O
f
f
s
e
t
】
−
I
m
a
g
e
B
a
s
e
+
实
际
加
载
地
址
【VirtualAddress+Offset】-ImageBase+实际加载地址
【VirtualAddress+Offset】−ImageBase+实际加载地址
【】代表这个地址存储的值
参考文献
《逆向工程核心原理》