您在這裏看到的是Microsoft Windows可執行文件中「基本重定位表」的內容。
基於Windows的DLL文件重定位表是必需的,它們對於可執行文件是可選的;它們包含有關地址信息在EXE/DLL文件中的位置的信息,當內存中的DLL文件的實際地址已知時(將DLL加載到內存中時),必須更新該文件。 Windows使用此表中存儲的信息來更新地址信息。
該表支持不同類型的地址,而命名是特定於Microsoft的:ABSOLUTE(= dummy),HIGH,LOW,HIGHLOW,HIGHADJ和MIPS_JMPADDR。
常量的全名是「IMAGE_REL_BASED_HIGHLOW」。
「ABSOLUTE」類型通常是插入的虛擬條目,以確保表的各部分長度爲4(或8)個字節的倍數。
在x86 CPU上,只使用「HIGHLOW」類型:它告訴Windows有關文件中絕對(32位)地址的位置。
一些背景資料:
在你的榜樣「圖像庫」可以爲0x20000000這意味着EXE/DLL文件已編制被加載到地址0x2000.0000。在地址0x200113B5(0x20000000 + 0x11000 + 0x3B5)和0x200113C1處有絕對地址。
假設位於0x200113B5的存儲器包含值0x20,該值是程序中函數或變量的地址。
也許無法使用地址0x20000000處的內存,Windows決定將該DLL加載到0x50000000的內存中。然後0x20必須替換爲0x50。
Windows使用基址重定位表中的信息來查找必須替換的所有地址。