是FileBuffer复制到ImageBuff的函数出错了,就图中的那一句Memcpy出了问题,应该是指针哪里写错了,但是自己排查不出来,真是崩溃了。。
函数代码如下:
DWORD CopyFileBufferToImageBuffer()
{
//参数 IN LPVOID pFileBuffer, OUT LPVOID* pImageBuffer
void* FileBuffer = ReadPEFile(FILEPATH);
LPVOID ImageBuffer = NULL;
pDosHeader = (PIMAGE_DOS_HEADER)FileBuffer;
pNTHeader = (PIMAGE_NT_HEADERS)((DWORD)FileBuffer + pDosHeader->e_lfanew);
pPEHeader = (PIMAGE_FILE_HEADER)((((char*)FileBuffer)+pDosHeader->e_lfanew )+ 4);
pOptionHeader = (PIMAGE_OPTIONAL_HEADER32)((DWORD)pPEHeader + 20);
pSectionHeader = (PIMAGE_SECTION_HEADER)((char*)pOptionHeader +
pNTHeader->FileHeader.SizeOfOptionalHeader);
//分配ImageBuffer大小的空间
ImageBuffer = malloc(pOptionHeader->SizeOfImage);
if (!ImageBuffer)
{
printf("分配内存空间失败:\n");
return 0;
}
//先Copy头的数据
memcpy(ImageBuffer, FileBuffer, pOptionHeader->SizeOfHeaders);
//Copy的头的大小
DWORD CopySize = pOptionHeader->SizeOfHeaders;
if (!ImageBuffer)
{
printf("复制SizeOfHeaders错误:\n");
return 0;
}
for (int i = 0; i < pPEHeader->NumberOfSections; i++)
{
memcpy(((char*)ImageBuffer + pSectionHeader->VirtualAddress),
((char*)pSectionHeader->PointerToRawData),
pSectionHeader->SizeOfRawData);
//GetLastError();
pSectionHeader += 40;
CopySize += pSectionHeader->SizeOfRawData;
}
return CopySize;
}
自学不易,还望不吝赐教