Simple ReadProcessMemory无法正常工作

问题描述 投票:0回答:1

我用Google搜索了一下,但似乎无法完成这项工作。

privileges();
int pid = getPid("test.exe");
cout << "Process ID :" << pid << endl;

const char* prename;
HANDLE pHandle = OpenProcess(PROCESS_VM_READ , FALSE, pid);
if (pHandle)
{
    cout << "Handle Open Success" << endl;
    //SIZE_T bytesRead;
    if (ReadProcessMemory(pHandle, (void*)0x013831BC, &prename, strlen(prename), NULL))
    {
        cout << "Read Success" << endl;
        cout << prename << endl;
    }

    else
        cout << GetLastError() << endl;

}
return 0;

它将打印“读取成功”,但不会仅将变量打印为空白。我从ollydbg获得的地址(在另一个进程中的字符串的地址),也使用一个函数对其进行了验证。

我也想用writeprocessmemory替换字符串,但是在我了解之前,我需要确保读取正确。

任何想法?

c++ readprocessmemory
1个回答
0
投票

您的问题在这里:

const char* prename;

ReadProcessMemory(pHandle, (void*)0x013831BC, &prename, strlen(prename), NULL)

您的char指针未初始化,它也不指向它的随机存储器。当您在其上调用strlen时,它试图获取随机内存位置的长度。

第二,您正在使用指针&prename的地址,这是指针的地址,而不是它应指向的char数组。

要解决此问题:

char prename[100];

ReadProcessMemory(pHandle, (void*)0x013831BC, &prename, sizeof(prename), NULL)

sizeof()将返回100,因此您将读取100字节的内存

© www.soinside.com 2019 - 2024. All rights reserved.