| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 670 人关注过本帖
标题:内存读写,高手请进。。。
取消只看楼主 加入收藏
低调求学
Rank: 2
等 级:论坛游民
帖 子:51
专家分:33
注 册:2012-5-9
结帖率:64.29%
收藏
 问题点数:0 回复次数:3 
内存读写,高手请进。。。
在网上看到这样一段代码:
进程地址通过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
快速回复:内存读写,高手请进。。。
数据加载中...
 
   



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

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