[question]pe---relocationtableprint
这一周要打印pe重定位表,好难呀【原创源码】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;
}
PE文件重定位?楼主可以看看我发的PE文件查看器。有源码。 http://www.52pojie.cn/thread-459693-1-1.html 看不懂什么东西也不解释介绍以下 我看了下,看不懂呀 leroy特洛伊 发表于 2016-6-24 17:59
看不懂什么东西也不解释介绍以下
就是作者的源码,都是c++的类,也没有找到具体函数的实现 修改一下标题前缀@2016wapjpc 奋斗丶小Z 发表于 2016-6-25 21:47
修改一下标题前缀@2016wapjpc
请问你说的修改一下标题前缀@2016wapjpc在哪里呀,什么意思呀,我不明白 2016wapjpc 发表于 2016-6-25 22:30
请问你说的修改一下标题前缀@2016wapjpc在哪里呀,什么意思呀,我不明白
【编程语言区】本版发帖标题格式=前缀+标题,不按照格式直接删除
http://www.52pojie.cn/thread-457450-1-1.html
页:
[1]