2011-08-26 137 views
2

我是新來張貼在這些論壇上,但多次來到這裏爲我的編程幫助需求,並且通常能夠很容易地找到我的答案,但我擔心我可能會提出錯誤的問題或者很明顯,我只是看不到它,但這是我的問題。.Net C#ReadProcessMemory指針函數向後返回地址

我正在爲Quake製作我的第一個教練,我以爲我會從一個容易找到指針的遊戲開始,而不是通常具有2+級指針的其他遊戲。所以我通過Cheat引擎通過Quake並抓取我需要的所有指針,使我的GUI等,但有一個問題。我讀了我的第一個指針,它返回我需要向後地址:/

例子:

這裏是我的指針,我是從閱讀 - 006C5214

時讀它給了我這個地址 - 02BFD940

然後,我將偏移量48C添加到上面的地址,該地址指向包含我需要的值的02BFDDCC。

當我看到我的指針與ReadProcessMemory我得到正確的地址,除了它的倒退(端?)

我需要02BFD940 我得到40D9BF02

我用盡了一切我能想到的前後翻頁該命令並將其返回到IntPtr中,以便在我的ReadProcessMemory/WriteProcessMemory中使用。我可以按照我想要的順序翻轉它,因爲我的ReadProcessMemory給出了我的地址,如40-D9-BF-02,它很容易用Split(' - ')切成一個數組;

唯一的問題是,我完成分裂和重新排序後,我想要的方式是我無法設法將其轉換回IntPtr用於我的讀寫記憶功能。

我一直使用作弊引擎或反彙編程序編輯內存。這是我第一次嘗試一個完全有效的教練,任何對我的問題的幫助將非常感激。我已經嘗試在我的BitConverter上設置endian布爾值,但它是隻讀的:/

如果我完全錯過了一些東西,它就在我的面前,隨時可以打電話給我,並給我一記耳光頭xD我不介意。

-P.S.你們家的論壇真棒。

+0

看來你相反的字節序獲取數據,如您懷疑。一個簡單的'Array.Reverse(byte [4]')應該可以做到。 – leppie

+0

哦,這可能對未來有所幫助,謝謝。 – Tsproggy

回答

3

嘗試

byte[] buffer = new byte[4]; 
    int bytesread; 

    ReadProcessMemory(hProcess, dwAddress, buffer, 4, out bytesread); 

    IntPtr P = new IntPtr (BitConverter.ToInt32(buffer, 0)); 
+0

謝謝,這解決了我的訂單問題,但我想我需要它回到十六進制的形式,以便我的ReadProcessMemory功能正常工作。或者它也會接受一個整數作爲地址輸入? – Tsproggy

+0

我不明白 - ReadProcessMemory需要IntPtr,而不是十六進制? – Yahia

+0

對不起,我只是試着讓ReadProcessMemory使用我的int32地址,它完美的工作!然後我添加了我的偏移量並獲得了我想要的值!非常感謝你的幫助:) @Yahia對不起,這是我的錯誤,由於某種原因,我認爲ReadProcessMemory只接受十六進制作爲地址輸入,但事實證明它也需要int和intptrs。 – Tsproggy