【问题标题】:Error read addres with function ReadProcessMemory c#使用函数 ReadProcessMemory c# 读取地址时出错
【发布时间】:2020-01-04 03:31:59
【问题描述】:

我在读取游戏内存地址时出错,其中: 我的代码是这样的

public partial class MainWindow: Window
    {
        [DllImport ("kernel32.dll")]
        public static extern IntPtr OpenProcess (int dwDesiredAccess, bool bInheritHandle, int dwProcessId);

        [DllImport ("kernel32.dll")]
        public static extern bool ReadProcessMemory (int hProcess, int lpBaseAddress, byte [] lpBuffer, int dwSize, ref int lpNumberOfBytesRead);
        const int PROCESS_WM_READ = 0x0010;

        public MainWindow ()
        {
            arguments dir = new arguments ();
            Process process = Process.GetProcessesByName (dir.proccessname) [0];
            IntPtr processHandle = OpenProcess (PROCESS_WM_READ, false, process.Id);
            int bytesRead = 0;
            byte [] buffer = new byte [4]; 
            ReadProcessMemory ((int) processHandle, dir.heal_Act, buffer, buffer.Length, ref bytesRead);
        }

但是,没有任何读数出现: 在作弊引擎中读取我的值

Read address with Cheat Engine 图像中出现读取内存地址的位置,最后是包含 4 个字节大小的值 Read address with Cheat Engine 另外,我不知道如何对方框2中的地址求和以获得包含的值。 他们可以帮助我提出带有指定地址的读数,因为出现了零。

【问题讨论】:

    标签: c# readprocessmemory


    【解决方案1】:

    您需要以管理员身份运行您的进程,并且应该将其编译为与目标进程相同的架构。如果您的目标是 x86,请编译为 x86。

    请记住,您的 ReadProcessMemory 定义仅使用 4 字节地址作为参数,您将希望使用 IntPtr 作为地址,因此当您有一天切换到 x64 时,args 将足以容纳 64 位指针。

    如果这些事情不能解决您的问题,那么您的偏移量或地址是错误的。在这种情况下,最好的办法是使用 Visual Studio 调试器并将您看到的内容与您在 Cheat Engine 中看到的内容进行比较。

    在您的 PROCESS_WM_READ 中,您还有一个“W”而不是“V”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-31
      • 1970-01-01
      • 2011-11-04
      • 2015-05-19
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      • 1970-01-01
      相关资源
      最近更新 更多