吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2685|回复: 10
收起左侧

[C&C++ 转载] [question]pe---relocationtableprint

[复制链接]
2016wapjpc 发表于 2016-6-24 17:45
这一周要打印pe重定位表,好难呀

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 2016wapjpc 发表于 2016-6-25 09:00

【原创源码】pe--relocation-table

本帖最后由 2016wapjpc 于 2016-6-29 22:11 编辑

重定位表的关键部分的实现


[code]
VOID TestPrintRelactionD()
{

               
                DWORD size = 0;

                LPVOID pFileBuffer = NULL;
               
                PIMAGE_DOS_HEADER pDosHeader = NULL;

                PIMAGE_NT_HEADERS pNTHeader = NULL;

                PIMAGE_FILE_HEADER pPEHeader = NULL;

                PIMAGE_OPTIONAL_HEADER32 pOptionHeader = NULL;

                PIMAGE_SECTION_HEADER pSectionHeader = NULL;
               

               

                  size = ReadPEFile(FILEPATH_IN,&pFileBuffer);

                pDosHeader = (PIMAGE_DOS_HEADER)pFileBuffer;
                                
                pNTHeader = (PIMAGE_NT_HEADERS)((DWORD)pFileBuffer+pDosHeader->e_lfanew);
        
                DWORD dwRva  =        pNTHeader->OptionalHeader.DataDirectory[5].VirtualAddress;

                        //relaction data table  foa
              DWORD ReloactionFileAddr = RvaToFileOffset( pFileBuffer, dwRva);
        
                     //fisrt relaction table
           PIMAGE_BASE_RELOCATION pRelcation =(PIMAGE_BASE_RELOCATION)((DWORD)pFileBuffer+ ReloactionFileAddr );

                //print data rva and blocks
           printf("第 1个RelVirtualAddress = %x\t SizeOfBlock= %X \n ",pRelcation->VirtualAddress ,pRelcation->SizeOfBlock);

                  
            DWORD   numofReloc=(pRelcation->SizeOfBlock    -0x8   )/2 ;
      
           WORD minioffset=0;        
              // to locate address to be modified
            WORD *pRelocData=(WORD*)((DWORD)pRelcation+0x8 );
                        
                        for(DWORD i = 0;i <  numofReloc ;i++)
                        {  
                                DWORD RelocAddress=0;
                                if (((*pRelocData)>>12)==3)
                                {                                
                                   minioffset=(*pRelocData)  &   0xFFF       ;
                                   DWORD        addressRVa= (pRelcation->VirtualAddress+ minioffset);                        
                                  RelocAddress = RvaToFileOffset( pFileBuffer, addressRVa);
                                  printf("%d rel-Rva: %x \t Address: %x\n",i+1,addressRVa, RelocAddress);
                                                                              
                                }
                        }

             break;  

}

[code]



rva and relocationblocks

rva and relocationblocks

address of relocation

address of relocation
狂暴补师亚丝娜 发表于 2016-6-24 17:52
PE文件重定位?楼主可以看看我发的PE文件查看器。有源码。
狂暴补师亚丝娜 发表于 2016-6-24 17:53
leroy特洛伊 发表于 2016-6-24 17:59
看不懂什么东西也不解释介绍以下
 楼主| 2016wapjpc 发表于 2016-6-24 21:15
我看了下,看不懂呀
 楼主| 2016wapjpc 发表于 2016-6-25 09:06
leroy特洛伊 发表于 2016-6-24 17:59
看不懂什么东西也不解释介绍以下

就是作者的源码,都是c++的类,也没有找到具体函数的实现
Cizel 发表于 2016-6-25 21:47
修改一下标题前缀@2016wapjpc
 楼主| 2016wapjpc 发表于 2016-6-25 22:30
奋斗丶小Z 发表于 2016-6-25 21:47
修改一下标题前缀@2016wapjpc

请问你说的修改一下标题前缀@2016wapjpc在哪里呀,什么意思呀,我不明白
Cizel 发表于 2016-6-25 22:46
2016wapjpc 发表于 2016-6-25 22:30
请问你说的修改一下标题前缀@2016wapjpc在哪里呀,什么意思呀,我不明白

【编程语言区】本版发帖标题格式=前缀+标题,不按照格式直接删除
http://www.52pojie.cn/thread-457450-1-1.html
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 18:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表