关于ReadProcessMemory的一个问题

lwl215 2008-11-02 01:33:17
DWORD base=0x123456;
hprocess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe32.th32ProcessID);
1: ReadProcessMemory(hprocess,(LPCVOID)base,&base,4,0);
str.Format("%X",base);
::AfxMessageBox(str);
2: ReadProcessMemory(hprocess,(LPCVOID)(base+0x44C),&base,4,0);
str.Format("%X",base);
::AfxMessageBox(str);
ReadProcessMemory(hprocess,(LPCVOID)(base+0x0),&name,sizeof(name),0);//namename
s=name;
在“hprocess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe32.th32ProcessID); ”之前的代码运行正常pe32.th32ProcessID返回的值与读取的程序pid相同AfxMessagebox里返回的base却始终不变,按理执行“1:”后base的地址&base应该等于0x123456,但是执行后却没有变仍然是原来base的地址,执行“2:”&base仍然没有更改。请问一下这是为什么。调试模式为Release,字符集改成了使用多字节字符集。其他的从创建MFC对话框后都没有动。
...全文
166 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lwl215 2008-11-03
  • 打赏
  • 举报
回复
我发现我的ReadProcessMemory()没有读取成功返回值为0,但是这个项目是从过去项目复制过来的过去项目好用但是复制的这个就这样,这是为什么。
WinEggDrop 2008-11-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lwl215 的回复:]
我没有说0x123456中读到的是0x123456我只是说ReadProcessMemory()执行后base的地址和值都没有改变,后来发现了ReadProcessMemory()里返回为0,但这个项目我是用过去好用的项目复制过来的。同样的项目过去的那个好用,复制过来就不好用了。我就想知道怎么解决这个问题?
[/Quote]

既然你说base值一直是相同的,那很明显是读取失败了,你随便检查ReadProcessMemory()就能知道是否读取成功的.
lwl215 2008-11-03
  • 打赏
  • 举报
回复
我没有说0x123456中读到的是0x123456我只是说ReadProcessMemory()执行后base的地址和值都没有改变,后来发现了ReadProcessMemory()里返回为0,但这个项目我是用过去好用的项目复制过来的。同样的项目过去的那个好用,复制过来就不好用了。我就想知道怎么解决这个问题?
WinEggDrop 2008-11-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 lwl215 的帖子:]
                                DWORD base=0x123456;
hprocess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe32.th32ProcessID);
1: ReadProcessMemory(hprocess,(LPCVOID)base,&base,4,0);
str.Format("%X",base);
::AfxMessageBox(str);
2: ReadProcessMemory(hprocess,(LPCVOID)(base+0x44C),&base,4,0);
str.Format("%X",base);
::AfxMessageBox(str);
ReadProcessMemory(hprocess,(LPCVOID)(base+0x0),&name,sizeo…
[/Quote]

感觉你的代码有点搞笑.
1.你读的内存地址为0x123456,你凭什么认为内存地址0x123456中读到的值是0x123456,不可以是0x344577或其它吗?
2.你连ReadProcessMemory()的返回值都不检查,你凭什么认为ReadProcessMemory()是成功了?
lwl215 2008-11-02
  • 打赏
  • 举报
回复
请问一下目标内存不可读应该怎么解决?
pady_pady 2008-11-02
  • 打赏
  • 举报
回复
也有可能是该进程hook掉了NTReadProcessMemory或ReadProcessMemory
pady_pady 2008-11-02
  • 打赏
  • 举报
回复
楼主理解错了
一.ReadProcessMemory 中返加到base中的数据为内存0x123456中的数据,其值未知假设为0x4fffff;
二.中返回的是内存0x4fffff+0x44c中的数据,它的值也不知道;

就楼主的情况,应该是目标内存不可读,试试int ret = ReadProcessMemory(hprocess,(LPCVOID)base,&base,4,0)是不是=0,如果是0.就是不可读,所以base的值没变,仍然是0x123456

15,471

社区成员

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

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