2017-04-09 69 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是你必须从某个地方申报的有效缓冲。