gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:43:40 25 4
gpt4 key购买 nike

我正在尝试从指针地址+偏移量读取一个值,而没有得到正确的结果。

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

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

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

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

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

最佳答案

FindDMAAddy返回指针链的最终地址。您的代码希望它包含该地址中的值,但不包含。您需要使用ReadProcessMemory来读取它。

正确的代码是:

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

uintptr_t addr = FindDMAAddy(hProcess, pObjectManager, countOffset);

int totalObjects = 0;

ReadProcessMemory(hProc, (BYTE*)addr, &totalObjects, sizeof(totalObjects), 0);

std::cout << "Current objects = " << totalObjects << std::endl;

关于c++ - 将20 Byes偏移量添加到指针地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59654250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com