2011-08-26 139 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