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

时间:2016-06-15 04:16:23

标签: c++ memory

我已成功通过C ++从游戏中读取数据。现在我需要读取它,以便GUI始终以正确的值更新。我有两个问题:

  1. 我是否使用无限循环?

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

  3. 顺便说一句,这是我的阅读功能

    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;
    }
    

    无限循环好吗?我不想让我的游戏变得迟钝。无限的循环听起来很可怕。

1 个答案:

答案 0 :(得分:0)

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

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