C++ 向指针地址添加20个字节的偏移量

C++ 向指针地址添加20个字节的偏移量,c++,cheat-engine,C++,Cheat Engine,我试图从指针地址+偏移量读取一个值,但没有得到正确的结果 我有以下(相关)代码: uintptpr_t moduleBase=GetModuleBaseAddress(procId,L“programmreading.exe”); uintpttr_t pObjectManager=moduleBase+0x237CB28; std::vector countOffset={0x20}; uintptpr_t totalObjects=FindDMAAddy(hProcess、pObjectMa

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

我有以下(相关)代码:

uintptpr_t moduleBase=GetModuleBaseAddress(procId,L“programmreading.exe”);
uintpttr_t pObjectManager=moduleBase+0x237CB28;
std::vector countOffset={0x20};
uintptpr_t totalObjects=FindDMAAddy(hProcess、pObjectManager、countOffset);

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

for (unsigned int i = 0; i < offsets.size(); ++i)
{
    int var;
    ReadProcessMemory(hProc, (BYTE*)addr, &var, sizeof(var), 0);
    addr += offsets[i];
}
for(无符号整数i=0;i
我对你的代码有点困惑,但我想你是在说这个:

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

uint32_t* pointer = 124;
++pointer; //128
或者使用长度为2个字节的
short

uint16_t* pointer = 124;
++pointer; //126
要向
uint32\u t
指针添加字节,必须先转换为
uint8\u t
指针,然后再转换回
uint32\u t
指针

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

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

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

正确的代码是:

uintptpr_t moduleBase=GetModuleBaseAddress(procId,L“programmreading.exe”);
uintpttr_t pObjectManager=moduleBase+0x237CB28;
std::vector countOffset={0x20};
uintptpr_t addr=FindDMAAddy(hProcess、pObjectManager、countOffset);
int totalObjects=0;
ReadProcessMemory(hProc,(字节*)addr和totalObjects,sizeof(totalObjects),0);

您希望在地址中找到什么样的对象?一个
int
、一个
double
、一个
?2596411228208十进制是0x25C862B030,这是屏幕截图中的数字。这不是您想要的吗?“长随机数”是您正在查找的数字,但以10为基数而不是16为基数。是的,现在再调用一次ReadProcessMemory()来获取int。我回滚了您的编辑,因为它删除了您问题的几乎所有重要部分。
uint16_t* pointer = 124;
++pointer; //126
uint32_t* pointer = 124;
uint32_t offset = 0x20;

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