蔚蓝的世纪之眼 蔚蓝的世纪之眼
!!!∑(°Д°ノ)ノ他什么字也没有留下QAQ~
关注数: 69 粉丝数: 144 发帖数: 8,985 关注贴吧数: 24
蒟蒻求助,摸索pvz修改器,关于用ReadProcessMemory函数读内存 最近自己尝试捣鼓pvz修改器, 现在只做到了找出阳关计数的偏移, 想先做一个只能修改阳光的修改程序, 但是ReadProcessMemory函数(C语言)时遇到了一些问题, 希望有大佬能解答一下。 ============================ 曾经搜索了好几个博客, 发现他们使用ReadProcessMemory的格式都是一样的, 我也照抄这样的格式。 部分代码:(楼下放完整代码) DWORD sunshineBaseAddress = 0x2A9EC0, sunshineBaseAddress_HuanCun = 0; DWORD dwSize = 0 ; //SIZE_T dwSize = 0; if(0 == ReadProcessMemory(PVZprocess, (LPVOID)sunshineBaseAddress, &sunshineBaseAddress_HuanCun, sizeof(DWORD), &dwSize) ) { printf("Fail.3\n"); return -1;} 出现两个warning: 1. warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]| 2.warning: passing argument 5 of 'ReadProcessMemory' from incompatible pointer type [-Wincompatible-pointer-types]| 第二个warning 可以把dwSize的数据类型改为SIZE_T解决 第一个warning始终为解决 最终运行结果为 控制台输出Fail.3, 即调用ReadProcessMemory函数这里出现问题, 但不清楚错误原理 ============================================ 完整代码: #include <stdio.h> #include <Windows.h> int main(){ HWND hh = FindWindow(NULL, "Plants vs. Zombies"); DWORD processID = 0; GetWindowThreadProcessId(hh, &processID); if(!processID) { printf("Fail.1\n"); return -1;} HANDLE PVZprocess = NULL; PVZprocess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,processID); if(PVZprocess == NULL) { printf("Fail.2\n"); return -1;} DWORD sunshineBaseAddress = 0x2A9EC0, sunshineBaseAddress_HuanCun = 0; DWORD dwSize = 0 ; //SIZE_T dwSize = 0; if(0 == ReadProcessMemory(PVZprocess, (LPVOID)sunshineBaseAddress, &sunshineBaseAddress_HuanCun, sizeof(DWORD), &dwSize) ){ printf("Fail.3\n"); return -1; } DWORD sunshineOffset1 = 0x768, sunshineOffset1_HuanCun = 0; if(0 == ReadProcessMemory(PVZprocess, (LPVOID)(sunshineBaseAddress_HuanCun + sunshineOffset1), &sunshineOffset1_HuanCun, sizeof(DWORD), &dwSize) ){ printf("Fail.4\n"); return -1; } DWORD sunshineOffset2 = 0x5560, sunshineOffset2_HuanCun = 0; if(0 == ReadProcessMemory(PVZprocess, (LPVOID)(sunshineOffset1_HuanCun + sunshineOffset2), &sunshineOffset2_HuanCun, sizeof(DWORD), &dwSize) ){ printf("Fail.5\n"); return -1; } int x; DWORD toSunshine; printf("modify sunshine to : "); scanf("%d", &x); toSunshine = (DWORD) x; WriteProcessMemory(PVZprocess, (LPVOID)(sunshineOffset1_HuanCun + sunshineOffset2), &toSunshine, sizeof(DWORD), &dwSize); CloseHandle(PVZprocess); getchar(); getchar(); return 0; }
1 下一页