向文件块写零无效

  • 本文关键字:无效 文件 c++ windows
  • 更新时间 :
  • 英文 :


所以我试图写一个0序列从文件偏移量直到文件结束,这是我的代码:

HANDLE hFile = CreateFileA((LPCSTR)"hello.txt", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

if(hFile < 0) return -1;
DWORD   fileSize = GetFileSize(hFile, NULL);    
DWORD   offset  = 0x13d4;
DWORD   check   = NULL;
DWORD   pos     = SetFilePointer(hFile, offset, 0, FILE_BEGIN);

BYTE*   zeroes  = new BYTE[fileSize-offset];

ZeroMemory((PVOID)zeroes, fileSize-offset);

WriteFile(hFile, (PVOID)&zeroes, fileSize-offset, &check, NULL);

printf("Wrote %d bytes at %xn", check, pos);

if(check < fileSize-offset)
{
printf("[+] An error occured while trying to patch the file.");
return EXIT_FAILURE;
}
CloseHandle(hFile);

现在我检查了我的fileSize是正确的,文件偏移量(pos)与offset相同,我的文件句柄是有效的,写入存储在check中的字节数等于zeroes缓冲区长度,最后一个错误是0。然而,当我在十六进制模式下检查我的文件时,它没有在末尾添加任何零。

任何想法?

Thanks in advance

WriteFile(hFile, (PVOID)&zeroes, fileSize-offset, &check, NULL);

是错误的。您正在将数据写入指针变量zeroes本身,而不是变量所指向的数据。通常,指针只有4或8个字节,所以如果文件足够大,可能会导致超出范围的访问。

删除zeros之前的&,使其写入zeroes指向的缓冲区的内容。

WriteFile(hFile, (PVOID)zeroes, fileSize-offset, &check, NULL);

最新更新