编程达人海哥c语言,编程达人 我在写海哥初级班39课作业的时候遇到了问题,希望有兄弟帮忙解答一下...

是FileBuffer复制到ImageBuff的函数出错了,就图中的那一句Memcpy出了问题,应该是指针哪里写错了,但是自己排查不出来,真是崩溃了。。

df9dc234f8a4938b4f8e8b002d16ed4f.png

函数代码如下:

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;

}

自学不易,还望不吝赐教

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值