读取内存值(实时)最佳实践

Read Memory Values (Real time) Best practice

本文关键字:最佳 实时 内存 读取      更新时间:2023-10-16

我已经通过C 成功读取了游戏的数据。现在,我需要阅读它,以使GUI始终具有正确的值。我有两个问题:

  1. 我在循环时使用无限吗?

    while(gameOn) {
        ReadAddress(1); //Example
        ReadAddress(2); //Example
        ReadAddress(3); //Example
        ReadAddress(4); //Example
        ....
        ReadAddress(100); //Example
        Sleep(200);
    }
    
  2. 您可以看到一个,而循环最终会读取许多游戏值。由于该值是连续的(我怀疑它是一种结构),所以我应该读100个字节并解析它吗?因此,该选项是一次读取100个字节,并相应地处理数据或每次读取1个字节100次。

顺便说一句,这是我的读取功能

int Process::memoryReadByte(int memoryAddress) {
    unsigned char buffer = 0;
    SIZE_T NumberOfBytesToRead = sizeof(buffer); //this is equal to 1
    SIZE_T NumberOfBytesActuallyRead;
    BOOL succeed = ReadProcessMemory(hProcess, (LPCVOID)(baseAddress + memoryAddress), &buffer, NumberOfBytesToRead, &NumberOfBytesActuallyRead);
    if (!succeed || NumberOfBytesActuallyRead != NumberOfBytesToRead) {
        return 0;
    }
    return buffer;
}

那么,无限的循环很好吗?我不想让我的游戏laggy。无限时,循环听起来很恐怖。

是的,您确实需要使用循环读取内存以保持本地副本的更新。

如果内存是连续的,则应在一个调用readProcessMemory()的一个调用中读取所有连续的内存,然后解析本地缓冲区。这将使您的程序更有效,因为ReadProcessMemory具有多个内部API调用和安全检查等的开销...