-
-
[求助]pe重定向表的输出
-
发表于:
2020-3-15 17:46
2342
-
本人打印解析重定位表时候,打印出重定位表,但是用pe编辑工具,打开对照的时候,发现重定位表的模块一共有1-23个重定位块的,但是我的程序输出窗口却是从20个块进行打印的,具体如图
核心代码如下
//3.循环解析重定位表
int i = 0;
while(relocDir->SizeOfBlock)
{ //重定位表的块大小为0时是最后一个块
printf("*************第%d个重定位表块************\n", i+1);
printf("VirtualAddress:%x\n",relocDir->VirtualAddress);
printf("SizeOfBlock:%x\n",relocDir->SizeOfBlock);
printf("#####要修改的地址#####\n");
printf("RVA\t前4位的值\n");
//获取具体项的数量
int j = (relocDir->SizeOfBlock -8)/2;
//循环解析每个具体项
PWORD item = (PWORD)((DWORD)relocDir + 8);
for(int k=0;k<j;k++)
{
//获取具体项低12位
WORD low = item[k] & 0x0fff;
//获取高4位的值
WORD hig = (item[k] & 0xf000) >> 12;
DWORD rva = (DWORD)low + relocDir->VirtualAddress;
printf("%x\t%d\n",rva,hig);
}
//找到下一个块
relocDir = (PIMAGE_BASE_RELOCATION) ((DWORD)relocDir + relocDir->SizeOfBlock);
i++; }
//4.释放内存
free(pFileBuffer);
return;
}
我查看了我的代码没有任何问题的,逻辑上面也是正确的,为什么只给我打印出几个呢??不是全部打印呢??
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!