2016wapjpc 发表于 2016-6-24 17:45

[question]pe---relocationtableprint

这一周要打印pe重定位表,好难呀

2016wapjpc 发表于 2016-6-25 09:00

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

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

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



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.VirtualAddress;

                        //relaction data tablefoa
            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;

}





狂暴补师亚丝娜 发表于 2016-6-24 17:52

PE文件重定位?楼主可以看看我发的PE文件查看器。有源码。

狂暴补师亚丝娜 发表于 2016-6-24 17:53

http://www.52pojie.cn/thread-459693-1-1.html

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
页: [1]
查看完整版本: [question]pe---relocationtableprint