【问题标题】:c++ readfile reading file incorrectly, [duplicate]c ++ readfile读取文件不正确,[重复]
【发布时间】:2020-10-20 19:29:31
【问题描述】:
int main() {

    HANDLE source = CreateFile(L"D:\\msgbox.exe", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    LARGE_INTEGER size;
    GetFileSizeEx(source, &size);
    char* buff = new char[size.QuadPart];

    DWORD dwBytesRead;
    ReadFile(source, buff, sizeof(buff), &dwBytesRead, NULL);
    void* buffer = (void*)buff;

    IMAGE_DOS_HEADER* DOSHeader = PIMAGE_DOS_HEADER(buffer);
    PIMAGE_NT_HEADERS nt = PIMAGE_NT_HEADERS((char*)(buffer)+DOSHeader->e_lfanew);
    
    //using other method it is correct (0x40000), using winapi will fail.
    cout << hex << nt->OptionalHeader.ImageBase << endl;
    return 0;
}

当我使用其他技术读取文件时,例如 fstream。或使用 c stdio。它通过输出二进制文件的 ImageBase 完美地工作,但是它不能使用 winapi 的 ReadFile() 工作。文件大小已经正确。

【问题讨论】:

    标签: c++ file winapi


    【解决方案1】:

    sizeof(buff) 不是分配缓冲区的大小,而是指针 buff 的大小。

    使用size.QuadPart 代替它作为要读取的大小。

    【讨论】:

      【解决方案2】:

      你使用了 '''sizeof(buff)''' 这对分配的缓冲区不起作用 一定要使用'''size.quad'''

      【讨论】:

        猜你喜欢
        • 2021-01-30
        • 1970-01-01
        • 1970-01-01
        • 2019-03-30
        • 1970-01-01
        • 1970-01-01
        • 2019-04-01
        • 2012-10-14
        • 2018-08-29
        相关资源
        最近更新 更多