将20 Byes偏移量添加到指针地址

问题描述 投票:1回答:2

我正在尝试从指针地址+偏移量读取值,但未获得正确的结果。

我有以下(相关的)代码:

uintptr_t moduleBase = GetModuleBaseAddress(procId, L"ProgramImReading.exe");
uintptr_t pObjectManager = moduleBase + 0x237CB28;
std::vector<unsigned int> countOffset = { 0x20 };

uintptr_t totalObjects = FindDMAAddy(hProcess, pObjectManager, countOffset);
std::cout << "Current objects = " << totalObjects << std::endl;

FindDMAAddy:

    uintptr_t FindDMAAddy(HANDLE hProc, uintptr_t ptr, std::vector<unsigned int> offsets)
{
    uintptr_t   addr = ptr;
    for (unsigned int i = 0; i < offsets.size(); ++i)
    {
        ReadProcessMemory(hProc, (BYTE*)addr, &addr, sizeof(addr), 0);
        addr += offsets[i];
    }
    return addr;
}

出于某种原因,这将无法正常工作。我可以通过打开作弊引擎并输入GameAdress + Pointer,然后设置offset + 20并获取正确的值来确认地址正确。

当我运行上面的代码时,我得到一个长的随机值“ 2596411228208”

我还可以找到指针指向的当前动态地址并直接从该地址读取,但是当我尝试从指针读取+偏移量时,它将无法正常工作。

c++ cheat-engine
2个回答
0
投票

由于您希望在给定地址找到int,因此需要使用:

for (unsigned int i = 0; i < offsets.size(); ++i)
{
    int var;
    ReadProcessMemory(hProc, (BYTE*)addr, &var, sizeof(var), 0);
    addr += offsets[i];
}

0
投票

我对您的代码有些困惑,但是我认为您在谈论这个:

[当您有一个指向int的指针时,即4个字节的长度,并且将该指针增加1,实际上是在该指针上加4,因为需要向前移4个字节才能获得下一个int ]。像这样:

uint32_t* pointer = 124;
++pointer; //128

或带有short,即2个字节长:

uint16_t* pointer = 124;
++pointer; //126

为了将字节添加到uint32_t指针,您必须先转换为uint8_t指针并转换回uint32_t指针。

uint32_t* pointer = 124;
uint32_t offset = 0x20;

pointer = (uint32_t)((uint8_t*)pointer + offset)

;

© www.soinside.com 2019 - 2024. All rights reserved.