簡體   English   中英

嘗試從另一個進程讀取32位整數時,ReadProcessMemory使應用程序崩潰

[英]ReadProcessMemory Crashes Application When Trying to Read 32bit Integer From Another Process

我一直在嘗試Windows API的各個方面,並認為我會嘗試對進程內存進行操作。 以前,我一直在嘗試使用以下方法在本機C ++中執行此操作: C ++-獲取特定內存地址的值

但是,此方法不起作用,我在Cplusplus論壇上的某個地方找到了一個響應,告訴我使用ReadProcessMemory。 我發現在嘗試編輯值時,WriteProcessMemory工作得很好,但是ReadProcessMemory要么失敗(返回錯誤代碼299),要么使應用程序崩潰。

這是我的代碼:

#include <iostream>
#include <cstdint>
#include <Windows.h>
#include <cstdio>

using namespace std;

int main()
{
    LPVOID bytes;
    DWORD pid;
    SIZE_T *num_bytes_read;
    int temp;
    SIZE_T size = sizeof(temp);
    LPCVOID address = reinterpret_cast<int*>(0x404004);
    HWND hwnd = FindWindow(NULL, "C:\\Users\\Delkarix\\Desktop\\memory_edit_test.exe");
    GetWindowThreadProcessId(hwnd, &pid);
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);

    BOOL worked = ReadProcessMemory(hProcess, address, bytes, size, num_bytes_read);
    cout << "ERROR: " << GetLastError() << endl;
    cout << "PROCESS: " << hProcess << endl;
    cout << "BYTES: " << bytes << endl;
    cout << "BASE ADDRESS: " << address << endl;
    cout << "FUNCTION SUCCESS: " << worked << endl;
    cout << "BYTES READ: " << *num_bytes_read << endl;
    CloseHandle(hProcess);
}

我注意到,當num_bytes_read變量是一個指針(ReadProcessMemory的第5個參數是num_bytes_read變量)時,應用程序崩潰,當它不是指針時,它拋出錯誤299(ReadProcessMemory的第5個參數是num_bytes_read變量的指針) 。

這是memory_edit_test.cpp的代碼:

#include <iostream>

using namespace std;

int test = 6;
int main() {
    string input;
    cout << &test << endl; // Where I got the address 0x404004
    getline(cin, input);
    cout << test << endl; // Used to check the value against the one I got from ReadProcessMemory
    getline(cin, input);
}

如何獲得ReadProcessMemory成功? 在StackOverflow上回答類似問題的答案無濟於事,否則只會使問題變得更糟。

問題非常簡單, ReadProcessMemory第三個參數旨在指向緩沖區,讀取的內存將寫入該緩沖區。 您只是給它一個非初始化的指針。 第五個參數也有類似問題。

您的代碼應如下所示

int temp;
SIZE_T num_bytes_read;
BOOL worked = ReadProcessMemory(hProcess, address, &temp, sizeof temp, &num_bytes_read);

注意,第三個和第五個參數是指向現有內存的指針。 聲明一個變量,並使用&獲取其地址。

暫無
暫無

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

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