我试图使用以下代码来读取进程的内存:

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()保证是不可靠的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top