将零写入文件块不起作用

亚历克斯

所以我正在尝试从文件偏移量到文件结尾写入零序列,这是我的代码:

    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 %x\n", check, pos);
    
    if(check < fileSize-offset)
    {
        printf("[+] An error occured while trying to patch the file.");
        return EXIT_FAILURE;
    }
    CloseHandle(hFile);

现在,我检查了我的fileSize是否正确,文件offset(pos)与相同offset,我的文件句柄有效,写入的字节数check等于zeroes缓冲区长度,最后一个错误为0。但是,当我检查我的文件处于十六进制模式,最后没有添加任何零。

有任何想法吗?

提前致谢

迈克猫

线

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

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

在删除&之前zeros请先写入指向的缓冲区的内容zeroes

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章