簡體   English   中英

簡單的 ReadProcessMemory 不起作用

[英]Simple ReadProcessMemory not working

我用谷歌搜索了一下,但似乎無法完成這項工作。

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 替換字符串,但在此之前我需要確保讀取正確。

任何的想法?

你的問題在這里:

const char* prename;

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

您的 char 指針未初始化,它指向的隨機內存也未初始化。 當您對其調用 strlen 時,它會嘗試獲取隨機內存位置的長度。

其次,您使用的是指針的地址&prename ,這是指針的地址,而不是它應該指向的字符數組。

要修復這樣做:

char prename[100];

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

sizeof() 將返回 100,因此您將讀取 100 字節的內存

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM