2017-04-09 78 views
-2

我最近在寫入處理C++內存時遇到了一個非常惱人的問題......我無法寫入處理具有多個偏移量的內存!即使有成千上萬的頁面解釋了你如何解決這個問題,它似乎仍然不適合我。我一整天都在搜索谷歌,並且發現了很多如何解決這個問題的例子,但它似乎仍然不適合我。具有多個偏移量的WriteProcessMemory C++

所以,讓我先解釋一下自己如何編寫處理內存,然後你就可以糾正它。

讓我們說我有一個基本地址:0x04AF3C94

首先偏移爲:爲0x1C

第二偏移爲:0x20的

三爲:0x568

;第四爲:量0x134

我怎麼這樣做自己:

DWORD offset1 = 0x1C; 
DWORD offset2 = 0x20; 
DWORD offset3 = 0x568; 
DWORD offset4 = 0x134; 

DWORD base = 0x04AF3C94; 
DWORD pointer; 
DWORD pointer2; 
DWORD pointer3; 
DWORD pointer4; 
DWORD pointer5; 
ReadProcessMemory(handle, LPVOID(base), &pointer, sizeof(pointer), 0); 
ReadProcessMemory(handle, LPVOID(pointer + offset1), &pointer2, sizeof(pointer2), 0); 
ReadProcessMemory(handle, LPVOID(pointer2 + offset2), &pointer3, sizeof(pointer3), 0); 
ReadProcessMemory(handle, LPVOID(pointer3 + offset3), &pointer4, sizeof(pointer4), 0); 
ReadProcessMemory(handle, LPVOID(pointer4 + offset4), &pointer5, sizeof(pointer4), 0); 

int value = 500; 
WriteProcessMemory(handle, LPVOID(pointer5), &value, sizeof(value), 0); 

正如你所看到的,如果我有4個偏移量,例如在這個例子中,我將每個偏移量一次一個添加到基地址,直到我有一個值存儲每個偏移量添加到基地址。 這顯然不工作,我該怎麼辦!?

+0

_This顯然不工作 - 什麼*確切*不起作用,你在閱讀,寫作或宇宙突然自我重啓時遇到崩潰? – zett42

+0

那麼,如果我有例如我的價值我想改變,它不會改變...程序不會崩潰或任何東西,但是我試圖改變的值根本不受影響。 –

回答

0

我無法用您的描述回覆所有人,但在MSDN中,他們說ReadProcessMemory讀取的內存是從指定緩衝區的位置讀取的。這意味着你打電話時...

ReadProcessMemory(handle, LPVOID(base), &pointer, sizeof(pointer), 0); 

......你的「指針」將填充什麼是在「基地」的地址。所以它將包含一個地址,該地址在地址「base」處的四個字節的值是數字的。這可能不是你想要的,因爲如果你之前沒有存儲過某個東西,它就是不確定的。如果是這樣,當你使用「指針」時它可能會崩潰。

如果你想讀的住址記憶「基地+偏移」與該功能,你必須做的是:

ReadProcessMemory(handle, LPVOID(base + offset1), some_buffer, some_buffer_size, 0); 

哪裏some_buffer是你必須從某個地方申報的有效緩衝。