我正在尝试使用以下代码读取进程内存:
void readdata(HANDLE phandle, LPCVOID paddress, SIZE_T datasize)
{
char *buff;
SIZE_T dataread;
BOOL b = FALSE;
buff = (char *) malloc (datasize);
b = ReadProcessMemory(phandle, paddress, (LPVOID)buff, datasize, &dataread);
if(!b)
{
printf("error reading memory, err = %d\n", GetLastError());
return;
}
printf("Data Read = %d\n", dataread);
printf("Len of actual buffer = %d\n", strlen(buff));
printf("Data = %s\n", buff);
free(buff);
return;
}
现在,phandle 和 paddress 是已知的,因为我使用了 WriteProcessMemory。我有从那里的价值观。数据大小也是已知的。
该功能工作正常,除了以下内容。ReadProcessMemory() 返回 dataread = 41 (这是正确的,我将 41 传递给 datasize)但 buff 的实际长度是 49。当我打印 buff 时,我得到了我的字符串 + 一些垃圾。
我究竟做错了什么?
代码表示赞赏。
谢谢!