typedef struct_image_base_relocation image_base_relocation;
typedef image_base_relocation unaligned * pimage_base_relocation;
1、當重定位發生的時候,只需知道現在pe檔案的載入基址,用現在的載入基址減去預設載入基址得到乙個數,再用這個數加上需要重定位的資料即可,所以重定位表中儲存的只是需要重定位的資料的位置。
2、重定位表也是乙個結構體陣列,以全零元素結尾,每乙個陣列元素描述了4kb大小的區域的重定位資訊。
3、結構體第三個成員並不是真正的結構體成員,它緊隨在結構體之後,是乙個不定多長的陣列,第乙個成員是乙個基址,描述的是某個區段中乙個區域的開始,如果在這個區域中每有乙個儲存全域性變數位址的地方(代表需要重定位),下面的第三個成員typeoffset陣列中就會有乙個元素和這個位置對應。
4、需要重定位的個數 = (sizeofblock - 8) / 2;
5、第三個成員的高4位,描述的是乙個屬性。低12位描述的才是乙個偏移。(大部分重定位屬性值都是0x3,代表整個位置的四個位元組都需要被修改)。
6、當基址重定位發生的時候,用第乙個成員,算出虛擬位址(va),也就是基址,依次加上偏移(第三個成員的後12位),就能得到儲存全域性變數位址的相對虛擬位址,也就找到了這個地方,再依據第三個成員高四位描述的屬性,對其進行重定位。
WinPE基礎知識之匯入表
匯入表 結構體陣列,以乙個全零元素為結尾,每乙個陣列元素,代表乙個pe檔案匯入資訊 匯入表儲存的是從其它pe檔案匯入過來的函式名 序號,載入到記憶體之後,還儲存這些函式的位址 typedef struct image import descriptor dummyunionname dword ti...
WinPE基礎知識之匯出表
匯出的東西包括函式 變數 類 位址,序號,函式 變數 類 名 typedef struct image export directory image export directory,pimage export directory a 匯出表應該被安排在.edata中,不過這個段一般都會合併到.rd...
WinPE基礎知識之頭部
1 dos頭 dos mz頭,大小為64個位元組 typedef struct image dos header image dos header,pimage dos header dos mz頭下面是dos stub,整個dos stub是乙個位元組快,其內容隨著鏈結時使用的鏈結器不同而不同,而...