| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 673 人关注过本帖
标题:内存读写,高手请进。。。
只看楼主 加入收藏
低调求学
Rank: 2
等 级:论坛游民
帖 子:51
专家分:33
注 册:2012-5-9
结帖率:64.29%
收藏
 问题点数:0 回复次数:5 
内存读写,高手请进。。。
在网上看到这样一段代码:
进程地址通过VirtualQueryEx这个API可以获取。数据的存放地址是ReadProcessMemory的返回值。最后一个变量自然也是返回值,所以无需设置。而你想要读取的数据的长度一般就是VirtualQueryEx返回的MEMORY_BASIC_INFORMATION结构中的RegionSize即区块大小。C++中,对一个进程的全部内存操作过程如下:
程序代码:
 const SIZE_T BaseInfoLen=sizeof(MEMORY_BASIC_INFORMATION);
    LPCVOID lpcEndOfVirtualMemory=(LPCVOID)END_OF_VM; //2G虚拟内存地址结束的地方
    SIZE_T SegLen=BaseInfoLen;
    MEMORY_BASIC_INFORMATION mbInfo;
    LPVOID lpBaseAddr=(LPVOID)0x400000; //4MB,可用虚拟内存开始的地方
   while(SegLen==BaseInfoLen&&lpBaseAddr<lpcEndOfVirtualMemory){
       SegLen=VirtualQueryEx(pHandle,lpBaseAddr,&mbInfo,BaseInfoLen);
       if(mbInfo.State==MEM_COMMIT&&mbInfo.Protect==PAGE_READWRITE) //已分配内存且可读写   { 
             PUCHAR Seg=(PUCHAR)malloc(mbInfo.RegionSize);  
             SIZE_T ReadLen;  
             ReadProcessMemory(pHandle,mbInfo.BaseAddress,Seg,mbInfo.RegionSize,&ReadLen);    //这里可以添加对读出来的内存块Seg进行操作   
             lpBaseAddr=(LPVOID)((char*)lpBaseAddr+mbInfo.RegionSize);  
       }
       else if(mbInfo.State==MEM_FREE&&mbInfo.RegionSize>0x08000000) //这个地方。。真没看懂!!!????
             break;  
       else   
            lpBaseAddr=(LPVOID)((char*)lpBaseAddr+mbInfo.RegionSize);
       }
刚刚接触windows编程!!求高手指点一二!!!!
搜索更多相关主题的帖子: 内存 color 
2012-12-06 12:58
低调求学
Rank: 2
等 级:论坛游民
帖 子:51
专家分:33
注 册:2012-5-9
收藏
得分:0 
等回复!!!在线等!!!
2012-12-06 13:30
低调求学
Rank: 2
等 级:论坛游民
帖 子:51
专家分:33
注 册:2012-5-9
收藏
得分:0 
怎么都没人回复一下勒!
2012-12-07 08:46
低调求学
Rank: 2
等 级:论坛游民
帖 子:51
专家分:33
注 册:2012-5-9
收藏
得分:0 
。。。。。
2012-12-18 10:38
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
mbInfo.State==MEM_FREE&&mbInfo.RegionSize>0x08000000

MEM_FREE
Indicates free pages not accessible to the calling process and available to be allocated.
For free pages, the information in the AllocationBase, AllocationProtect, Protect, and Type members is undefined.

自己翻译下就行了,不难

>0x08000000的空间是内核的空间了,应用程序是访问不到的。


我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-18 11:24
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:0 
遇到这类型的问题,建议去查询msdn,大多数情况下有你想要的

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2012-12-18 11:25
快速回复:内存读写,高手请进。。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033601 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved