内存页搜索方式要怎么做
详情如下:用winhex打开内存方式打开A进程,看到0x10000的位置上是数据3D也就是十进制的61.
接着我用我设计的软件搜索A进程的61值,找到很多,也找到0x10000,然后在我程序上通过修改成功,winhex再次打开A进程时那个地址变成我修改后的值了,说明我的程序没问题.
但在寻找某些值的时候,总是不能够显示正确的值,比如我查找某个值,但是修改后没有效果,用金山游侠却找到另外一个地址,有效果.我怀疑我的内存页设置搜索有点问题
伪代码如下:
MEMORY_BASIC_INFORMATION mypidshow;//进程信息结构
SYSTEM_INFO siSysInfo;//系统信息
char *sip=(char*)0;//指向内存地址,它表示要搜索哪里
GetSystemInfo(&siSysInfo);//获得一次系统信息
sip=(char*)siSysInfo.lpMinimumApplicationAddress;//最初的时候我把地址设定为用户地址开始的方位
while(sip<siSysInfo.lpMaximumApplicationAddress)//搜寻退出条件,当遇到用户地址结束的时候
{
VirtualQueryEx(hProcess,sip,&mypidshow,sizeof(mypidshow));//先看下页情况
if((mypidshow.State==MEM_COMMIT)&&(mypidshow.AllocationProtect==PAGE_READWRITE))//真正的条件是否这样?
{
ReadProcessMemory(hProcess,(LPVOID)sip,&addr,sizeof(addr),0);//读取字节到变量addr
if(addr==m_find)
{
//.....把找到的保存起来,等待下一次搜索
}
sip++;//搜索的地址值自己往上加
}
else
{
sip=sip+mypidshow.RegionSize;//如果页面信息不是我上面的条件,那就直接跳过.RegionSize是当前整个页的大小
}
}
问题:
仔细看我定义的条件,MEMORY_BASIC_INFORMATION的State成员是MEM_COMMIT的时候和AllocationProtect成员是PAGE_READWRITE的时候.才发生搜索.页文件有些问题,有些值找不到.
另外我搜索的结果要比金山游侠的多,但速度却很慢,几乎慢上10倍.哪里有问题?