【问题标题】:.Net C# ReadProcessMemory Pointer function returns address backwards.Net C# ReadProcessMemory 指针函数向后返回地址
【发布时间】:2011-11-04 06:54:46
【问题描述】:

我是在这些论坛上发帖的新手,但为了我的编程帮助需求,我已经多次来到这里,并且通常能够相当容易地找到我的答案,但我担心我可能问错了问题,或者可能是非常明显,我只是没看到,但这是我的问题。

我正在为 Quake 制作我的第一个教练,我想我会从一个容易找到指针的游戏开始,而不是我的其他游戏通常有 2 个以上的指针。所以我通过 Quake 和 Cheat Engine 获取所有我需要的指针,制作我的 gui 等,但是有一个问题。我读了我的第一个指针,它返回了我需要的地址:/

例子:

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

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

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

当我使用 ReadProcessMemory 读取指针时,我得到了正确的地址,但它是向后的(字节序?)

我需要 02BFD940 我得到 40D9BF02

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

唯一的问题是,在我按照我想要的方式完成拆分和重新排序后,我无法将它转换回 IntPtr 以用于我的读写内存功能。

我一直使用作弊引擎或反汇编程序来完成我的记忆编辑工作。这是我第一次尝试在一个完全工作的培训师那里得到任何帮助,我将不胜感激。我尝试在我的 BitConverter 上设置字节序布尔值,但它是只读的:/

如果我完全错过了什么并且它就在我面前,请随时叫我出来并给我一个耳光xD我不介意。

-附言你们的论坛很棒。

【问题讨论】:

  • 正如您所怀疑的那样,您似乎以相反的字节序获取数据。一个简单的Array.Reverse(byte[4]) 应该可以解决问题。
  • 哦,这对将来可能会有所帮助,谢谢。

标签: c# .net memory process


【解决方案1】:

试试

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

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

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

【讨论】:

  • 谢谢,这解决了我的订单问题,但我认为我需要将其恢复为十六进制形式,以便我的 ReadProcessMemory 函数正常工作。还是它也接受一个整数作为地址输入?
  • 我不明白 - ReadProcessMemory 需要 IntPtr,而不是十六进制?
  • 对不起,我只是尝试让 ReadProcessMemory 使用我的 int32 地址,它工作得很好!然后我添加了我的偏移量并得到了我想要的值!非常感谢您的帮助 :) @Yahia 抱歉,这是我的错误,出于某种原因,我认为 ReadProcessMemory 只接受十六进制作为地址输入,但事实证明它也需要整数和 intptrs。
  • 很高兴我能提供帮助 - 如果答案有帮助,请不要忘记投票/标记为已接受...
  • :( 我试过了,但它说我需要 15 声望,一旦我获得一些声望,我将不得不重新访问这篇文章。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
  • 2021-07-14
  • 2021-09-20
  • 2020-04-29
  • 2013-04-10
  • 1970-01-01
  • 2015-12-02
相关资源
最近更新 更多