2013-10-04 39 views
1

我试图改变提供时间的纸牌地址的值。解引用指针来操作地址的内容

给定下面的代码,基地址+偏移量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

“baseaddress + offset 0x97074应该指向另一个地址” - 说谁? –

+0

据我所知,从CE看到这些地址指向另一个地址,最后这个地址指向时间地址。如我错了请纠正我。 – user23842348943292

+0

不管你是否错了,我都不会有任何想法的影子。你从哪里得到这些信息?什么是CE? –

回答

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; 
+0

感谢您的回答,但纸牌不断崩溃,我只是想知道为什么我的BaseAddress只返回没有“0x”的“1F4”,这会影响任何东西吗?在取消引用这个地址之前,我必须添加0x吗? – user23842348943292

+0

@Mostey不,这不是问题,0x只是在C++代码中编写十六进制整数文字的惯例。当你的程序运行时,这不是什么意思。尝试按照我展示的内容进行分解,并查看它崩溃的线路。顺便说一句,我不知道你想做什么是对的。我只是试着编写一些与你的描述相匹配的代码。 – john

+0

@Mostey刚刚意识到我的'简化'代码被窃听。我已经编辑希望纠正它。 – john