我在写海哥初级班39课作业的时候遇到了问题,希望有兄弟帮忙解答一下 共1个红包, 当前剩余0个, 每个5元 互助问答
  • 蓝枫冰笛 等级 N0
    2019-02-14 21:09

    是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;
    }

    自学不易,还望不吝赐教

  • 浏览 393
  • 点赞 0
  • 分享 2
  • 点赞 已赞 收藏 已收藏
回答 (4)
    正在加载中...
    ---到底了---
    talk 4 top
    展开
    >