ReadProcessMemory返回一个较大的缓冲液(C,视窗)
-
19-09-2019 - |
题
我试图使用以下代码来读取进程的内存:
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的。我已经从那里值。命令datasize也是已知的。
在功能工程确定,除了以下。 ReadProcessMemory()返回DATAREAD = 41(这是正确的,我通过41至命令datasize),但抛光轮的实际长度是49当我打印的buff让我的字符串+一些垃圾。
我在做什么错了?
码被理解。
谢谢!
解决方案
在“\ 0”在您的字符串的末尾时有可能不被复制,或者你的缓冲液时,写,或到您的缓冲区,当你阅读。其结果是,printf()的仅仅是将从字符串的开头打印,直到它看到一个“\ 0”,其可以是数字的垃圾字符之后。
其他提示
你知道你读出的数据是一个字符串? IE浏览器。 ,它的空终止?如果没有,那么使用的strlen()保证是不可靠的。
不隶属于 StackOverflow