pe重定向表的输出

爱必应

本人打印解析重定位表时候,打印出重定位表,但是用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;}
我查看了我的代码没有任何问题的,逻辑上面也是正确的,为什么只给我打印出几个呢??不是全部打印呢??

pe重定向表的输出-图1

pe重定向表的输出-图2

声明:本站所有资源均由网友分享,如有侵权内容,请在文章下方留言,本站会立即处理。

原文链接:,转发请注明来源!

发表评论