C++ 读取文件读取文件不正确


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((则无法正常工作。文件大小已正确。

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

使用size.QuadPart而不是它作为读取的大小。

您使用了"sizeof(buff(",它不适用于分配的缓冲区 请使用"size.quad">

最新更新