首页
社区
课程
招聘
[求助]hook RtlFreeHeap以后出现访问错误
发表于: 2006-8-24 09:49 6334

[求助]hook RtlFreeHeap以后出现访问错误

2006-8-24 09:49
6334
PHEAP_ENTRY pFreeEntry;//8字节管理结构
char *pFreeEnd;
hook函数为__declspec (naked)BOOLEAN WINAPI My_RtlFreeHeap( HANDLE hHeap,ULONG dwFlags, PVOID pAddress)
{
读取参数pAddress
  pFreeEntry=(PHEAP_ENTRY)pAddress-1;
  if((unsigned long)pFreeEntry>0x00010000&&(unsigned long)pFreeEntry<0x7ffeffff)
   {
     pFreeEnd=(char*)(pFreeEntry+pFreeEntry->Size-1);
      if(!(pFreeEntry->Flags& HEAP_ENTRY_VIRTUAL_ALLOC))//如果不是虚拟块
         { for(freeStr=0;freeStr<8;freeStr++)
            {   pFreeEnd=pFreeEnd+freeStr;
            if((*pFreeEnd)!='A')----XXXXX
            break;
            }       
          }                                                       
    }
..............
...............
}

程序运行出现访问错误在位置XXXXX处:0x01db8004(pFreeEnd)地址不能读取,为什么会这样呢?
0x01db8004在用户的地址空间呀。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lrh
2
解决了,把通过指针pFreeEnd访问的部分进行修改,先用ReadProcessMemory函数读取再进行判断就可以了。可是我还是不明白为什么通过指针访问就不行呢?
2006-8-24 10:58
0
雪    币: 139
活跃值: (126)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
通过指针访问当然可以,只是你的访问越界,很多人编程容易出这个问题。
2006-8-25 11:28
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
最初由 bookworm 发布
通过指针访问当然可以,只是你的访问越位,很多人编程容易出这个问题。
前面没球员防守了。
2006-8-25 13:21
0
雪    币: 199
活跃值: (74)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
最近我也在做Hook Heap操作相关函数,能否交流交流
lizhongan@sina.com
2006-8-31 16:09
0
游客
登录 | 注册 方可回帖
返回
//