2017-08-12 81 views
0

我使用DWORD BaseAddress = (DWORD)GetModuleHandle("example.exe");來獲取我附加過程的基地址。我使用的所有地址都是DWORD類型,我在地址編號之前使用0x,所以它是十六進制的,而不是十進制。我正在使用一臺x64電腦。我正在閱讀的這兩個地址都包含一個文本值。C++ ReadProcessMemory基地址+偏移量不工作

此代碼爲一個靜態地址:

ReadProcessMemory(pHandle, (LPVOID)Address1, (LPVOID)&Address1Value, sizeof(Address1Value)*3, 0); 
char PlayerNameBuffer[13] = {0}; 
snprintf(Address1Buffer, sizeof(Address1Value)*3, "%s", (LPVOID)&Address1Value); 
ImprovedSetWindowText(Address1DisplayLabel, Address1Buffer); 

那麼,爲什麼不這項工作動態地址?:

DWORD Address2 = BaseAddress + Addres2Offset; 
ReadProcessMemory(pHandle, (LPVOID)Address2, (LPVOID)&Address2Value, sizeof(Address2Value)*3, 0); 
char LocationNameBuffer[13] = {0}; 
_snprintf(Address2Buffer, sizeof(Address2Value)*3, "%s", (LPVOID)&Address2Value); 
ImprovedSetWindowText(Address2DisplayLabel, Address2Buffer); 
+0

你如何獲得'Address2Offset'?我認爲這不重要,但從技術上講,如果您的進程是64位,則應該使用64位類型來保存地址。 DWORD是32位寬。 –

+0

我反向工程,發現它。我知道這是正確的100%的事實,因爲我用另一個軟件輸入地址和偏移量來顯示值是什麼,但我無法在C++中使用它。此外,我將DWORD更改爲DWORD64,並沒有什麼區別,我不認爲問題與變量類型有關。 – Dav3

+0

我的問題已解決,我正在使用GetModuleHandle。 – Dav3

回答

-1

我的問題已經解決了,我用的GetModuleHandle不當。

+0

請詳細說明下一個錯誤使用它的人可以(1)認識到他們錯誤的代碼與你的匹配,並(2)看到正確的代碼。 –