浏览器堆喷时,为什么说堆头大小是32字节?

最近在研究浏览器精准堆喷相关的技术,找到老外的一篇文章中提到计算堆喷的数据块时,应该减去一些必要的大小,如:堆头32字节,BSTR结构的6个字节(BSTR长度和结束符)

http://www.exploit-monday.com/2011/08/targeted-heap-spraying-0x0c0c0c0c-is.html
文中提到:
在这里插入图片描述
其中为什么要减去堆头大小32字节,让我很疑惑,因为我看到的堆头明明只有8个字节啊!

在这里插入图片描述

经过查询了很多外文资料,也是给解释堆的头结构大小只有8个字节,如下图:

资料一:
在这里插入图片描述

资料二:
在这里插入图片描述

经过动手调试发现,原来真的是32字节,
我在堆喷后的块中,选择了第一个堆块,入口地址为0x037b0018
在这里插入图片描述
这些堆喷申请的堆块是在默认堆中分配出来的,它的父级堆地址就是0x140000,结构是**_HEAP**,通过查看父级堆的结构,发现了一个和0x37b0018很接近的地址,在VirtualAllocdBlocks字段中,一下子让我想起来,Windows内存管理中的知识!!
在这里插入图片描述
VirtualAllocdBlocks字段是一个双向链表结构,记录着0x140000这个进程中默认堆中申请过的小堆块。
在这里插入图片描述
下图中:
0)红色代表双堆碎片的向链表 8字节
1)黄色代表堆块头 8字节
2)蓝色代表堆的数据区 x字节
在这里插入图片描述
现在就解释清楚了,为什么要减去32字节的堆头了!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值