为什么总是在MEM_FREE状态 在线等待,立即给分

jardyson 2008-10-14 05:14:42
通过VirtualQueryEx取得用户区页面,但该区域页面状态有时全部都是释放状态,不解?这样子程序能正常运行吗?而且此时我如何查询内存数据?
...全文
266 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
baihacker 2008-10-15
  • 打赏
  • 举报
回复
MEM_FREE
0x10000
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.
frank_ll 2008-10-14
  • 打赏
  • 举报
回复
看不懂
帮顶
jardyson 2008-10-14
  • 打赏
  • 举报
回复
没人了吗,顶上去
jardyson 2008-10-14
  • 打赏
  • 举报
回复
但我这个就觉得奇怪,我查询过QQ,还有很多进程,直接空着跑出来.以下是我的C#代码
int sLen = VirtualQueryEx(proceID, ref baseAddr, ref mbi, mbiLen);
while (sLen == mbiLen && baseAddr <= maxAddr)
{
switch (mbi.State)
{
case MEM_COMMIT:
OldFlg = mbi.Protect;
if (mbi.Protect == PAGE_NOACCESS || mbi.Protect == PAGE_GUARD)
{
VirtualProtectEx(proceID, ref baseAddr, mbi.RegionSize, PAGE_EXECUTE_READWRITE, ref OldFlg);
}
ReadProcessMemory(proceID, int.Parse(baseAddr.ToString()), lpBuff, 2, lpWritenn);
if (mbi.Protect == PAGE_NOACCESS || mbi.Protect == PAGE_GUARD)
{
VirtualProtectEx(proceID, ref baseAddr, mbi.RegionSize, OldFlg, ref OldFlg);
}
if (this.coniValue.ToString() == lpBuff[0].ToString())
{
clsM.AddC(MEM_COMMIT);
}
break;
case MEM_FREE:
clsM.AddF(MEM_FREE);
break;
case MEM_RESERVE:
OldFlg = mbi.Protect;
if (mbi.Protect == PAGE_NOACCESS || mbi.Protect == PAGE_GUARD)
{
VirtualProtectEx(proceID, ref baseAddr, mbi.RegionSize, PAGE_EXECUTE_READWRITE, ref OldFlg);
}
VirtualAlloc(ref baseAddr, mbi.RegionSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
ReadProcessMemory(proceID, int.Parse(baseAddr.ToString()), lpBuff, 2, lpWritenn);
if (this.coniValue.ToString() == lpBuff[0].ToString())
{
clsM.AddR(MEM_RESERVE);
}
if (mbi.Protect == PAGE_NOACCESS || mbi.Protect == PAGE_GUARD)
{
VirtualProtectEx(proceID, ref baseAddr, mbi.RegionSize, OldFlg, ref OldFlg);
}
break;
case MEM_PRIVATE:
OldFlg = mbi.Protect;
if (mbi.Protect == PAGE_READWRITE)
{
ReadProcessMemory(proceID, int.Parse(baseAddr.ToString()), lpBuff, 2, lpWritenn);
if (this.coniValue.ToString() == lpBuff[0].ToString())
{
clsM.AddR(MEM_RESERVE);
}
}
break;
}

baseAddr = baseAddr + mbi.RegionSize;

sLen = VirtualQueryEx(proceID, ref baseAddr, ref mbi, mbiLen);
}
我用CE查询过微软自带的小游戏,数据可以立马显示出来,但我怎么查都是空,奇怪...
过去的我 2008-10-14
  • 打赏
  • 举报
回复
一般不可能全部是free的。。总要泱射点东西

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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