我正在尝试更改提供时间的纸牌地址的价值。
根据下面的代码,baseaddress + offset 0x97074应该指向另一个偏移量为0x50的地址,最后这个地址应该指向偏移量为x0C的最终地址来改变时间值。
但是,当我执行此操作时,单人纸牌会崩溃。
HMODULE hModule = GetModuleHandle(nullptr);
sstream << std::hex << reinterpret_cast<unsigned int>(hModule);
str = sstream.str();
BaseAddress = reinterpret_cast<DWORD>(str.c_str());
//MessageBox(NULL, (LPCSTR) BaseAddress, "Adress", MB_OK); just some reminder
*(*(*(*(DWORD *) BaseAddress + (DWORD *) BASE_OFS_DEF ) + (DWORD *)TIME_OFS1_DEF ) + (DWORD *)TIME_OFS2_DEF) = 500;
答案 0 :(得分:1)
逻辑错误,在添加偏移量并将偏移量转换为指针之前,您正在取消引用指针!我认为这就是你想要的
*(DWORD*)(*(DWORD*)(*(DWORD*)(BaseAddress + BASE_OFS_DEF) + TIME_OFS1_DEF) + TIME_OFS2_DEF) = 500;
但你应该真的打破这一点,以帮助了解正在发生的事情,例如。
DWORD temp1 = *(DWORD*)(BaseAddress + BASE_OFS_DEF);
DWORD temp2 = *(DWORD*)(temp1 + TIME_OFS1_DEF);
*(DWORD*)(temp2 + TIME_OFS2_DEF) = 500;