提问者:小点点

C++readfile读取文件不正确,[重复]


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()就不能工作了。 文件大小已经正确。


共2个答案

匿名用户

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

使用size.quadPart而不是该值作为要读取的大小。

匿名用户

您已经使用了''sizeof(buff)''',这对分配的缓冲区无效,请使用''size.quad'''

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++readfile|读取|文件|不正确|重复)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?