基址重定位表

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;

計算

VirtualAddress+OffsetImageBase+【VirtualAddress+Offset】-ImageBase+實際加載地址
【】代表這個地址存儲的值

參考文獻

《逆向工程核心原理》

發佈了94 篇原創文章 · 獲贊 21 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章