首页
社区
课程
招聘
[讨论]挑战:堆地址
发表于: 2012-11-3 15:15 5439

[讨论]挑战:堆地址

2012-11-3 15:15
5439
给你一个任意的堆地址,你如何知道它该所属的堆块已经释放?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 292
活跃值: (153)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
说吧,这是谁给你出的题~!
2012-11-3 16:45
0
雪    币: 55
活跃值: (531)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
3
安装SEH,然后对这个堆地址进行操作,比如写入,如果堆地址已释放,将发生异常。此时捕获异常即为堆地址已释放。若未出异常则堆地址仍然存在物理页映射关系。(前提是先查询这个堆地址所在页的属性)
2012-11-3 18:32
0
雪    币: 412
活跃值: (30)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
4
楼上的做法也不一定,有可能你用heapfree释放了,但是堆管理器并没有调用系统的释放函数,而是自己保留以备下次用,这样的话估计就需要解析heap管理的内部结构了。
2012-11-6 19:22
0
雪    币: 1491
活跃值: (985)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
5
堆块一直很复杂样
2012-11-6 23:06
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
6
HeapFree不是立即释放的,所以最好的方法是NtAllocateVirtualMemory指定开始地址申请一页大小的内存,然后如果成功申请回来的地址和你的那啥的地址相等或在同一页内就是释放ok了~
奇淫杂技而已~
2012-11-8 12:56
0
雪    币: 1407
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这个对Win8无效吧
2012-11-9 14:25
0
游客
登录 | 注册 方可回帖
返回
//