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;
計算
【】代表這個地址存儲的值
參考文獻
《逆向工程核心原理》