Aei*_*uch 4 c++ memory pointers offset
所以,我已经在一个进程(游戏)中注入了一个DLL,以便我可以从进程内存中读取.
我想获得当前的游戏时间,并且我已经使用Cheat Engine找到了它的静态基地址和偏移量:
"的Game.exe" + 0158069C
抵消:14
这是我试图获取浮点值的代码(当前游戏计时器):
//Offsets
#define BASETIME 0x158069C
#define OFFSET 0x14
void CurrentTime() {
float *time;
DWORD *BaseAddress = (DWORD*)GetModuleHandle(NULL);
DWORD *BaseTimeAddress = (DWORD*)(BaseAddress + BASETIME);
time = (float*)(BaseTimeAddress + OFFSET);
if (BaseTimeAddress && time) //Check the addresses, not values.
{
std::cout << "Base Address : " << BaseAddress << endl; // Correct
std::cout << "Base Time Address &: " << &BaseTimeAddress << endl; // Not correct
std::cout << "Base Time Address : " << BaseTimeAddress << endl; // Not correct
std::cout << "Time Value : " << *time << endl; // Not correct
}
}
Run Code Online (Sandbox Code Playgroud)
基地址的cout是正确的(我可以用Cheat Engine检查),但在那之后一切都错了,你能帮助我吗?我坚持这个,我尝试了很多东西......:/
先感谢您,
我假设你想增加你的指针OFFSET和BASETIME字节.如果是这样,您的代码不会以字节为单位递增.相反,它按sizeof(DWORD) * OFFSET字节递增.
原因是基本指针类型是DWORD*,并且递增此类型的指针n将使您n * sizeof(DWORD)远离开始.这不会起作用.
最简单的解决方案是char *在执行指针运算时转换为a ,以便增量继续sizeof(char),而不是sizeof(DWORD):
DWORD *BaseTimeAddress = (DWORD*)((char *)BaseAddress + BASETIME);
time = (float*)((char *)BaseTimeAddress + OFFSET);
Run Code Online (Sandbox Code Playgroud)
现在,无论你最终到底是你想要的数据,这是我无法回答的.但是,如果您的目标是以字节为单位递增,那么您应该进行如上所示的更正.
| 归档时间: |
|
| 查看次数: |
9425 次 |
| 最近记录: |