ReadProcessMemory到底怎么才能使用正确

昰绽至强 2018-01-22 09:23:01
如问题所示,我是想做一个如下图右侧的程序

然后我用MFC做了一个简单的目标程序,如下图

图中窗口中的原始数据为10000,我用CE工具找到这个10000所在的内存地址,如下图

地址为0073F9B8
于是我写出如下代码,想用我写的代码,读出目标程序中的这个数值10000,下面是我的代码:

PidGame = GetProcessIDByName("Test.exe");//获取进程ID
std::cout << "当前进程ID为" << PidGame << std::endl;
hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, PidGame);//获取进程句柄
if (hProcess != NULL)
{
if (ReadProcessMemory(hProcess, (LPVOID)0x0073F9B8, sitNumP, 4, NULL) == 1)
{
cout << "读取成功" << endl;
printf("读取到的数据是:%s\n", sitNumP);
}
else
cout << "读取失败" << endl;
}

上面代码运行后显示的是读取成功,但是读到的数据显示空白,我不知道是我哪里除了问题,是因为我地址找的不对吗?
CE工具找到的是什么地址,希望大神能答疑 谢谢
...全文
2818 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
smwhotjay 2018-01-24
  • 打赏
  • 举报
回复
ReadProcessMemory 写过单机小辅助,锁血,锁枪,锁特技。地址固定不变,大概是全局变量。有的游戏是动态变量那个头大了。
赵4老师 2018-01-23
  • 打赏
  • 举报
回复
printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方,而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
Eleven 2018-01-23
  • 打赏
  • 举报
回复
printf("读取到的数据是:%s\n", sitNumP); sitNumP是什么类型???? 字符串???
昰绽至强 2018-01-23
  • 打赏
  • 举报
回复
引用 2 楼 zgl7903 的回复:
设置断点查看原始值, double 是 8 个字节, 字符串首字节0时结束 double fData = 0; if (ReadProcessMemory(hProcess, (LPVOID)0x0073F9B8, &fData, 8, NULL) ) { printf("read value = %lf\n", fData); }
感谢
zgl7903 2018-01-23
  • 打赏
  • 举报
回复
设置断点查看原始值, double 是 8 个字节, 字符串首字节0时结束 double fData = 0; if (ReadProcessMemory(hProcess, (LPVOID)0x0073F9B8, &fData, 8, NULL) ) { printf("read value = %lf\n", fData); }

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧