尝试运行代码时出错

时间:2018-05-10 09:04:05

标签: c memory

每当我尝试运行以下代码时,都会收到错误。Image_Error

Image2_Error 从Visual Studio添加了另一个错误图像。 Image3_error 添加了确切的错误来源。

The following bit of code here is : 

void update_memblock(MEMBLOCK *mb)
{
    static unsigned char tempbuf[128 * 1024];
    unsigned int bytes_left;
    unsigned int total_read;
    unsigned int bytes_to_read;
    unsigned int bytes_read;


        bytes_left = mb->size;
        total_read = 0;


        while (bytes_left)
        {
            bytes_to_read = (bytes_left > sizeof(tempbuf)) ? sizeof(tempbuf) : bytes_left;
            ReadProcessMemory(mb->hProc, mb->addr + total_read, tempbuf, bytes_to_read, (DWORD*)&bytes_read);
            if (bytes_read != bytes_to_read) break;

            memcpy(mb->buffer + total_read, tempbuf, bytes_read);

            bytes_left -= bytes_read;
            total_read += bytes_read;
        }

        mb->size = total_read;

}



The Structure looks as follows : 
typedef struct _MEMBLOCK { 
    HANDLE hProc;   
unsigned char *addr;    
int size;   
unsigned char *buffer;
    struct _MEMBLOCK *next;

} MEMBLOCK;

尝试切换很多,从更改数组大小到删除变量并将其切换到另一个,显然它仍然会抛出此错误。请帮我弄清问题所在。感谢。

1 个答案:

答案 0 :(得分:2)

如果您阅读 documentation ,您会注意到ReadProcessMemory的参数 SIZE_T s 为他们应该。 DWORD类型是32位,在64位平台上大小为64位。虽然bytes_to_read因值传入而无关紧要,但8个字节将写入bytes_readsizeof的{​​{1}}所指向的指针。

此外,你应该得到一个指针类型不匹配,因为在这种情况下DWORD * SIZE_T *不兼容。