2015-04-02 230 views
-3

我想弄清楚讀取偏移量最合乎邏輯的一步一步,這裏是當前正在處理的代碼。分解ReadProcessMemory函數,讀取多個偏移量

DWORD BaseOFFSET = 0x000000; 
    DWORD address2 = ReadProcessMemory(pHandle, (void*)(BaseOFFSET + 0x50),0, sizeof(DWORD), 0); //50 doors down in baseoffset 
    DWORD address3 = ReadProcessMemory(pHandle, (void*)(address2 + 0x0500),0, sizeof(DWORD), 0); // address 3 is address2 + another 500 doors down the line 
    DWORD address4 = ReadProcessMemory(pHandle, (void*)(address3 + 0x140),0, sizeof(DWORD), 0); // and so on... 
    DWORD address5 = ReadProcessMemory(pHandle, (void*)(address4 + 0x100), 0, sizeof(DWORD), 0); //Final offset is stored in address5 

因爲我知道一個浮標存儲在最終的地址,我會用這個來清點值多數民衆贊成在地址

float* Data = (float*)(&address5); 
    if (Data != nullptr) 
     Sleep(2000); 
    cout << *Data << std::endl; 

我在那裏有睡眠(2000年),因爲它是一個長環檢查地址中的值,看看它是否發生變化,並取決於變化,我會做不同的事情。代碼編譯並運行正常,但返回的值是錯誤的,當我在循環中執行時,我得到0。

+3

您可能想要參考ReadProcessMemory的[文檔](https://msdn.microsoft.com/en-us/library/windows/desktop/ms680553%28v=vs.85%29.aspx)。它不會返回讀取的值,您正在使用它不正確。 – 2015-04-02 23:15:17

+0

我很驚訝代碼沒有崩潰。輸出參數不是可選的,並且您傳遞NULL。 – 2015-04-02 23:38:30

回答

0

首先,您正在使用ReadProcessMemory錯誤。失敗返回0,成功返回1。你得到零,因爲它失敗了,可能是因爲你爲輸出指針傳遞了null(0),這是不可選的。其次,你不能直接使用來自其他進程的指針(如你在你的例子中用*Data)。您需要調用ReadProcessMemory與您獲得的外部指針讀取其他進程上下文中的指向數據。