.Net C#ReadProcessMemory指针函数向后返回地址

时间:2011-08-26 06:53:04

标签: c# .net memory process

我很想在这些论坛上发帖,但为了我的编程帮助需求已多次来到这里,并且通常能够很容易地找到我的答案但是我担心我可能要么提出错误的问题,要么就是很明显,我只是没有看到它,但这是我的问题。

我正在为Quake制作我的第一个培训师,我想我会从一个很容易找到指针的游戏开始,而不是通常有2个级别指针的其他游戏。所以我用Quat Engine通过Quake并获取我需要的所有指针,让我的gui等,但是有一个问题。我读了我的第一个指针,它返回我需要的地址:/

示例:

这是我正在阅读的指针 - 006C5214

阅读时它给了我这个地址 - 02BFD940

然后我将我的偏移48C添加到我上面的地址,该地址将我引导到包含我需要的值的02BFDDCC。

当我用ReadProcessMemory读取指针时,我得到了正确的地址,除了它向后(endian?)

我需要02BFD940 我得到40D9BF02

我已经尝试了所有我能想到的东西来翻转顺序并将其返回到IntPtr中以便在我的ReadProcessMemory / WriteProcessMemory中使用。我可以按照我想要的顺序翻转它,因为我的ReadProcessMemory给出了我的地址,如40-D9-BF-02,可以很容易地切成带有Split(' - ')的数组;

唯一的问题是,在我按照我想要的方式完成拆分和重新排序后,我无法将其转换回IntPtr,以便与我的读写内存函数一起使用。

我总是使用作弊引擎或反汇编程序来编辑内存。这是我第一次尝试完全工作的教练,对我的问题的任何帮助将不胜感激。我已尝试在我的BitConverter上设置endian布尔值,但它只读:/

如果我完全错过了某些东西而且它就在我面前,我可以随意打电话给我,并给我一个头脑上方xD我不介意。

-P.S。你们这些人的论坛很棒。

1 个答案:

答案 0 :(得分:3)

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

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

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