2017-04-20 55 views
0

現在,我知道以前可能有人問過類似的問題,並相信我,在過去的幾天裏,我一直在環顧網絡尋找已經回答的情況,但是我仍然無法得到這個工作,說實話,不知道爲什麼它不工作。我試圖做的是獲得遊戲中的彈藥價值。 readMemory,這是一個int,應該包含這個值,但是它只是輸出0ReadProcessMemory - 向指針添加5個偏移量

ReadProcessMemory(handle, (PBYTE*)(base_adr), &pAddress1, sizeof(pAddress1), 0); 
    ReadProcessMemory(handle, (PBYTE*)(pAddress1 + offset_1), &pAddress2, sizeof(pAddress2), 0); 
    ReadProcessMemory(handle, (PBYTE*)(pAddress2 + offset_2), &pAddress3, sizeof(pAddress3), 0); 
    ReadProcessMemory(handle, (PBYTE*)(pAddress3 + offset_3), &pAddress4, sizeof(pAddress4), 0); 
    ReadProcessMemory(handle, (PBYTE*)(pAddress4 + offset_4), &pAddress5, sizeof(pAddress5), 0); 

    while (1) 
    { 
     ReadProcessMemory(handle, (PBYTE*)(pAddress5 + offset_5), &readMemory, sizeof(readMemory), 0); 
     cout << readMemory << endl; 
    } 

顯然,這是不添加指針的有效方法(也不是工作方式,我想),我正在尋找能夠指引我走向正確方向的人。謝謝,並且再次爲(很可能在你的眼中)一個基本問題感到抱歉。

DWORD base_adr = 0xCC8408; 
const DWORD offset_1 = 0x23C; 
const DWORD offset_2 = 0x7A4; 
const DWORD offset_3 = 0x34C; 
const DWORD offset_4 = 0x5B0; 
const DWORD offset_5 = 0x2D8; 
DWORD pAddress1; 
DWORD pAddress2; 
DWORD pAddress3; 
DWORD pAddress4; 
DWORD pAddress5; 
+1

什麼是不工作? – RbMm

+0

@RbMm好吧,我試圖在遊戲中獲得彈藥價值,然而'readMemory'(int)輸出爲0.將進行編輯以澄清所有人,對不起。 – 4Dimensions

+0

@ 4Dimensions建議設置一個簡單的程序,其中包含一個簡單的數據結構以用作測試假人。當你可以讀取和修改測試假人的記憶時,開始嘗試操縱「真實」程序。 – user4581301

回答

0

閱讀功能ReadProcessMemory我注意到的第一件事MSDN文章是這樣的:

被讀取必須是可訪問的整個區域或操作失敗。

我建議的第一件事就是檢查這些調用的返回值。我敢肯定,他們都會因爲「失敗」而返回0,所以接下來你要做的就是致電GetLastError,瞭解它爲什麼失敗。

一旦你弄清楚了,你就可以修復它。更可能的問題是您的程序沒有足夠的權限來訪問另一個進程的內存。

快速搜索彈出如何正確地訪問其他進程的內存此操作系統文章:How is it possible to access memory of other processes?