本人打印解析重定位表时候,打印出重定位表,但是用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;}
我查看了我的代码没有任何问题的,逻辑上面也是正确的,为什么只给我打印出几个呢??不是全部打印呢??
声明:本站所有资源均由网友分享,如有侵权内容,请在文章下方留言,本站会立即处理。