首页
社区
课程
招聘
[求助]pe重定向表的输出
发表于: 2020-3-15 17:46 2342

[求助]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;
}
我查看了我的代码没有任何问题的,逻辑上面也是正确的,为什么只给我打印出几个呢??不是全部打印呢??

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 168
活跃值: (823)
能力值: ( LV10,RANK:173 )
在线值:
发帖
回帖
粉丝
2
问题应该出在找到下一个块那边,你再仔细调一下
2020-3-15 18:57
0
雪    币: 1151
活跃值: (244)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
kaoyange 问题应该出在找到下一个块那边,你再仔细调一下
我测试了一下,不是那方面的问题,定位地址都是正确的,以及rva转foa也是正确的,我如果把循环定在循环两次,他就从第一个模块到第二个模块,如果循环定在3次,他好像就是第二个模块到底三个模块,最上面是第一个模块最后的四个,也就说,好像代码没问题,但是屏幕输出就是最后三个区块输出到窗口上的
2020-3-16 08:59
0
游客
登录 | 注册 方可回帖
返回
//