//打印重定位表
BOOL PrintReloctionTable(PBYTE fileName) {
PVOID pFileBuffer = FileToFileBuffer(fileName);
PIMAGE_DOS_HEADER pDosHeader = pFileBuffer;
PIMAGE_NT_HEADERS pNTHeader = (DWORD)pDosHeader + pDosHeader->e_lfanew;
if (pNTHeader->Signature != IMAGE_NT_SIGNATURE) {
printf("File is not PE\n");
free(pFileBuffer);
return FALSE;
}
PIMAGE_FILE_HEADER pFileHeader = &pNTHeader->FileHeader;
PIMAGE_OPTIONAL_HEADER pOptHeader = (DWORD)pFileHeader + sizeof(IMAGE_FILE_HEADER);
PIMAGE_SECTION_HEADER pSecHeader = (DWORD)pOptHeader + pFileHeader->SizeOfOptionalHeader;
PIMAGE_BASE_RELOCATION pBaseRelocation = VAToFOA(pOptHeader->DataDirectory[5].VirtualAddress, pFileBuffer);
while (pBaseRelocation->VirtualAddress && pBaseRelocation->SizeOfBlock) {
DWORD items = (pBaseRelocation->SizeOfBlock - sizeof(IMAGE_BASE_RELOCATION)) / 2;
PWORD pData = pBaseRelocation + 1;
printf("VirtualAddress:%08x,items:%04x\n", pBaseRelocation->VirtualAddress, items);
for (size_t i = 0; i < items; i++) {
//那个lordePE软件的offset算出来有问题,我的rva和它是一样的但是offset却不一样
printf("type:%02x,RVA:%08x\n", (0xf000 & (*pData)) >> 12, (0x0fff & (*pData)) +
pBaseRelocation->VirtualAddress);
pData++;
}
pBaseRelocation = (DWORD)pBaseRelocation + pBaseRelocation->SizeOfBlock;
printf("-----------------------");
}
return TRUE;
}
打印重定位表
最新推荐文章于 2024-07-21 12:44:58 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)