【发布时间】:2021-06-19 00:31:34
【问题描述】:
我正在尝试为游戏创建游戏教练。我找到了所需的内存地址,现在我想将我的值写入该地址。
例如:弹药地址为:0x0E9AFD07
Windows API 中的WriteProcessMemory() 函数可以做到这一点。
我的来源:
int main(){
DWORD pid;
int address = 0x0E9AFD07;
const int data = 20;
HWND hwnd = FindWindow(0 , "Max Payne v1.05");
GetWindowThreadProcessId(hwnd , &pid);
HANDLE hndl = OpenProcess(PROCESS_ALL_ACCESS , false ,pid);
WriteProcessMemory(hndl , &address , &data , 4 , NULL);
return 0;
}
但是这段代码不起作用!
如果我应该使用WriteProcessMemory,如下所示:
WriteProcessMemory(hndl , (void*)0x0E9AFD07 , &data , 4 , NULL);
那么函数的第二个参数是LPVOID 类型,我读到LPVOID 是指向任何东西的指针。
那么,为什么我不能为第二个参数传递指向int(地址变量)的指针?
我为什么要使用(void*)?
【问题讨论】:
-
哦,对不起。为什么我们在地址前使用 (void*) ?
-
对多次编辑感到抱歉。但请澄清哪种语言(C 或 C++)。
falsesuggests C++ 的使用,但可以在 C 中定义(为 0)。OpenProcess进程采用BOOL第二个参数。 -
非常感谢 :))
标签: c++ c winapi memory cheat-engine