fastbin_dup_consolidate.c 源码

调试分析

首先malloc两个0x40大小的fastbin chunk

同样申请0x40,加上0x10大小的chunk头,1字节的假大小(由于inuse位为1),实际大小为0x50

继续调试,对p1进行了free

p1被放进fastbin的空闲链表

然后再malloc一个0x400大小的largbin chunk

来看一下_int_malloc()源码

检查是否是fastbin范围

检查是否是smallbin范围

都不是就判断属于largebin

可以看到这里在获取了largebin的下表后会检查在分配区(av)内是否有fast chunk (本例有)

如果有则触发malloc_consolidate,对分配区内的chunk进行合并分类

查看consolidate源码

主要做的就是向前合并、向后合并相邻的chunk,如果相邻的是top chunk则并入top chunk,重复这三步直到fastbin链表为空,且合并后的chunk会放到unsortedbin中,除了top chunk

而这里在free完p1后malloc了一个0x400大小的chunk

0x400 = 1024,实际分配大小为0x400 + 0x10 = 0x410

大于1024字节的chunk会从largebins中申请

此时就会触发malloc_consolidate

p1就会从fastbin中被放到unsortedbin

之后会先在unsortedbin里面整理查找是否有符合大小的chunk,在这个过程中p1就会被分类到smallbin中(因为这里已经没有去fastbin的选择了)

这个过程我们没有跟踪所以我们查看heap的时候会看到0x40大小的p1 chunk被分到了smallbin中而不是unsortedbin

然后unsortedbin为空,仍未返回需要大小的chunk,则在largebin中查找是否有合适大小的chunk(这里就不是’exact fit’了),由于largebin此时为空,则在lastremainder中切割一块0x410大小的chunk出来返回给用户,并将剩下的lastremainder保存为top chunk

而由于在consolidate的过程中p1被移动到smallbin中了,fastbin现在没有记录p1

所以我们可以再次free p1

现在,我们就同时在fastbin和smallbin里有p1

我们就可以malloc p1两次

第一次malloc结束

p1从原来的fastbin记录变为了smallbin

第二次malloc结束

p1被malloc两次才变为allocated状态

此时就发生了 ‘double free’,两次申请的chunk指针指向同一块内存,

How2heap--fastbin_dup_consolidate(by glibc-2.23)相关推荐

  1. Centos7 glibc库升级到2.23(实测可行)

    注意:Centos 为了稳定使用的glibc版本通常比较低.而安装有些程序需要依赖新版本.升级glibc需要慎重,因很多人升级失败后导致系统不能用了. 本人亲测,升级了多台机器,全部升级成功. gli ...

  2. Centos7 glibc库升级到2.23

    注意:Centos 为了稳定使用的glibc版本通常比较低.而安装有些程序需要依赖新版本.升级glibc需要慎重,因很多人升级失败后导致系统不能用了. 本人亲测,升级了多台机器,全部升级成功. gli ...

  3. how2heap glibc 2.27

    文章目录 fastbin dup fastbin reverse into tcache house of botcake house of einherjar house of force tcac ...

  4. pwn with glibc heap(堆利用手册)

    前言 ​ 对一些有趣的堆相关的漏洞的利用做一个记录,如有差错,请见谅. ​ 文中未做说明 均是指 glibc 2.23 ​ 相关引用已在文中进行了标注,如有遗漏,请提醒. 简单源码分析 ​ 本节只是简 ...

  5. how2heap 深入学习(2)

    how2heap下载网址: 传送门 Glibc源码查看网址:传送门 参考书籍:CTF竞赛权威指南-pwn篇 测试环境:Ubuntu 16.04 Glibc版本:Ubuntu GLIBC 2.23-0u ...

  6. 借助gdb调试glibc代码学习House of Orange

    转自: https://bbs.pediy.com/thread-251195.htm house_of_orange https://www.jianshu.com/p/1e45b785efc1 借 ...

  7. glibc-2.23学习笔记(一)—— malloc部分源码分析

    glibc-2.23学习笔记(一)-- malloc部分源码分析 搭建Glibc源码调试环境 1.下载并解压glibc源码 2.配置gdb 3.编译测试程序 第一次调用 源码分析 __libc_mal ...

  8. glibc 知:ld.so

    文章目录 1. 名称 2. 概要 3. 描述 3.1. 动态字符串标记 4. 选项 5. 环境 5.1. 安全执行模式 5.2. 环境变量 5.2.1. LD_ASSUME_KERNEL(自 glib ...

  9. linux下qt多个程序打包,解决Ubuntu下使用linuxdeployqt打包Qt程序问题

    写了点Qt界面程序,然而发现很难移植到其他没有安装Qt环境的电脑上运行.查资料了解到,在windows上有windowsdeployqt程序,linux上有linuxdeployqt可以帮助我们快速打 ...

  10. 基于PaddleOCR实现AI发票识别的Asp.net Core应用

    简要介绍 用户批量上传需要识别的照片,上传成功后,系统会启动Hangfire后台Job开始调用PaddleOCR服务返回结果,这个过程有点类似微服务的架构模型. PaddleOCR PaddleOCR ...

最新文章

  1. Nginx+Tomcat集群与负载均衡
  2. Eclipse与MyEclipse增强代码提示
  3. 为了OFFER,花了几个小时,刷下Leetcode链表算法题
  4. 质量三维论如何持续推进腾讯视频播放体验提升
  5. MATLAB函数随笔之计算篇
  6. 寒冬之下,移动开发没人要了, iOS 开发者该 何去何从?
  7. 网上看到的,关于测试用例编写粒度准则
  8. 动态口令 java_java动态口令登录实现过程详解
  9. Even better, if you don’t want to answer and
  10. P9:卷积神经网络的工程实践技巧
  11. 部门WIFI配置-防火墙-核心交换机和POE交换机
  12. PTA — 单词长度 (15 分)
  13. [渝粤教育] 广东-国家-开放大学 21秋期末考试建设工程法规10221k1
  14. python 身份证识别_Card-Ocr:身份证识别 OCR
  15. 新课改计算机论文,新课改中职计算机职业教育论文
  16. win10如何共享打印机_windows1064位系统如何连接window732位共享打印机
  17. python网络爬虫——robots协议
  18. 使用Python做饼图
  19. python爬贴吧回复_Python爬虫实践,获取百度贴吧内容
  20. 字节跳动高工面试:java高级程序员面试宝典蔡羽豆瓣

热门文章

  1. 外包公司干了不到 3 个月,我裸辞了!
  2. Dell服务器 iDRAC(IPMI) 如何连接管理服务器
  3. 【读书笔记】 我编程_我快乐——程序员职业规划之道
  4. ZEGO 即构科技首发适配鸿蒙系统的 Express SDK 1.0 版本
  5. 如何使用iview的upload实现vue自定义上传做一个可复用页面
  6. Android 超级用户源码(superuser.apk)免费
  7. 原来打印机有这么多类型呀!
  8. 如何快速翻译excel表格中的英文?
  9. mysql设置字段区分大小写
  10. markdown artical test