关于如何理解Glibc堆管理器
文章平均质量分 93
Tokameine
愿让言语掀起巨浪,在人群里横冲直撞。
迁站:tokameine.top
展开
-
关于如何理解Glibc堆管理器(Ⅹ——完结、补充、注释——Arena、heap_info、malloc_*)
本篇实为个人笔记,可能存在些许错误;若各位师傅发现哪里存在错误,还望指正。感激不尽。若有图片及文稿引用,将在本篇结尾处著名来源(也有置于篇首的情况)。 截至到本节内容,该系列算是正式完结了,后续或许会有补充,但基本上都将添加在本节内容中。在前几节中,笔者已经按照自己的思路尽可能详尽的将Glibc的堆管理器Ptmalloc2的方式做了一定的介绍,尽管Ptmalloc2的内容肯定不止这些,但已能大致了解其工作方式了 但也有一些必要的内容未曾在前几节中放出,诸如突然出现...原创 2021-08-07 19:12:48 · 899 阅读 · 0 评论 -
关于如何理解Glibc堆管理器(Ⅸ——从源代码理解free)
本篇实为个人笔记,可能存在些许错误;若各位师傅发现哪里存在错误,还望指正。感激不尽。若有图片及文稿引用,将在本篇结尾处著名来源(也有置于篇首的情况)。 为了文章的可读性,笔者将使用“块引用”来表示分支情况,在没有特别标注的情况下(没有说明引用来源时),其中内容均为笔者所写目录源代码:__libc_free:分支1:free(0)分支2:该内存由mmap分配分支3:否则_int_free:分支1:使用Tcache分支2:符合Fast Bin...原创 2021-08-07 16:59:55 · 767 阅读 · 0 评论 -
关于如何理解Glibc堆管理器(Ⅷ——从源代码理解malloc)
本篇实为个人笔记,可能存在些许错误;若各位师傅发现哪里存在错误,还望指正。感激不尽。若有图片及文稿引用,将在本篇结尾处著名来源(也有置于篇首的情况)。 关于glibc堆管理器Ptmalloc2的实际讨论在前几节已经大致结束了,但是笔者仍觉得对其分配机制缺少完整的认识,于是最后两节将直接通过源代码来对其分配和释放规则进行分析 尽管笔者所用的Ubuntu18.04使用glibc-2.27,但笔者在对照源代码后发现,实际的操作和官方放出的glibc2.29更加接近,因此...原创 2021-08-07 14:12:03 · 1489 阅读 · 0 评论 -
关于如何理解Glibc堆管理器(Ⅶ——Tcache Bins!!)
本篇实为个人笔记,可能存在些许错误;若各位师傅发现哪里存在错误,还望指正。感激不尽。若有图片及文稿引用,将在本篇结尾处著名来源(也有置于篇首的情况)。 笔者本该将这一节的内容与第二节合并的,因为Tcache的并入并没有带来非常多的内容。但从结构上考虑,笔者一直以来都在使用glibc-2.23进行说明,在该版本下尚且没有引入Tcache Bins,因此这一节的内容一直拖欠到今。直到glibc-2.27开始,官方才引入了Tcache Bins结构,因此本节内容也将在该版本下进行说明(不...原创 2021-08-06 22:09:20 · 1000 阅读 · 0 评论 -
关于如何理解Glibc堆管理器(Ⅵ——从House of Orange理解Heap是如何被拓展的)
本篇实为个人笔记,可能存在些许错误;若各位师傅发现哪里存在错误,还望指正。感激不尽。若有图片及文稿引用,将在本篇结尾处著名来源(也有置于篇首的情况)。目录参考文章:正文:mmap:brk: 调试代码:参考文章:https://ctf-wiki.org/pwn/linux/user-mode/heap/ptmalloc2/house-of-orange/https://blog.csdn.net/le119126/artic...原创 2021-08-04 23:34:39 · 394 阅读 · 1 评论 -
关于如何理解Glibc堆管理器(Ⅴ——从Large Bin Attack理解malloc对Bins的分配)
本篇实为个人笔记,可能存在些许错误;若各位师傅发现哪里存在错误,还望指正。感激不尽。若有图片及文稿引用,将在本篇结尾处著名来源(也有置于篇首的情况)。参考文章: 同样先引用如下两篇文章。如果读者能够通过如下三篇文章掌握Large Bin Attack,那么本篇便只是附带品,没有什么其他内容 https://dangokyo.me/2018/04/07/a-revisit-to-large-bin-in-glibc/ https://ctf...原创 2021-08-03 00:55:30 · 655 阅读 · 0 评论 -
关于如何理解Glibc堆管理器(Ⅳ——从Unlink攻击理解指针与chunk寻址方式)
本篇实为个人笔记,可能存在些许错误;若各位师傅发现哪里存在错误,还望指正。感激不尽。若有图片及文稿引用,将在本篇结尾处著名来源。参考文章:在此先给出几篇可供参考的文章。笔者认为几位师傅所写的都比笔者所写要来得更加精炼。倘若您通过如下几篇文章已经能够完全理解Unlink为何,那么大可以不再阅读这篇冗长的文章。 安全客:https://www.anquanke.com/post/id/197481 看雪:https://bbs.pedi...原创 2021-08-01 17:43:54 · 522 阅读 · 0 评论 -
关于如何理解Glibc堆管理器(Ⅲ——从DoubleFree深入理解Bins)
本篇实为个人笔记,可能存在些许错误;若各位师傅发现哪里存在错误,还望指正。感激不尽。若有图片及文稿引用,将在本篇结尾处著名来源。环境与工具: Ubuntu16.4 / gcc / (gdb)pwn-dbg 范例:howtoheap2搭建调试环境:git clone https://github.com/shellphish/how2heap.gitcd how2heapmake 对于GitHub可能速度过慢的情况,可以尝...原创 2021-08-01 15:58:49 · 441 阅读 · 0 评论 -
关于如何理解Glibc堆管理器(Ⅱ——Free与Bins)
本篇实为个人笔记,可能存在些许错误;若各位师傅发现哪里存在错误,还望指正。感激不尽。若有图片及文稿引用,将在本篇结尾处著名来源。目录Free与Bins:SmallBinLargeBinUnsortedBinFast BinTcacheBin额外说明Free与Bins: malloc如果一旦和free混用,情况就变得复杂了。我们可以先思考一下下面的问题:如果只能malloc的话,那么内存最终必然会被消耗殆尽,因此free函数的存在...原创 2021-08-01 14:30:17 · 448 阅读 · 0 评论 -
关于如何理解Glibc堆管理器(Ⅰ——堆结构)
本篇实为个人笔记,可能存在些许错误;若各位师傅发现哪里存在错误,还望指正。感激不尽。若有图片及文稿引用,将在本篇结尾处著名来源。目录:什么是堆实际操作—————————————————————— 首先从 什么是堆 开始讲起吧。 在操作系统加载一个应用程序的时候,会为程序创建一个独立的进程,这个进程拥有着一套独立的内存结构。大致结构如下图:进程在运行之处会创建一块固定大小的堆空间,但当用户需要申请一块超出已有堆空间大小的内存时,...原创 2021-08-01 13:25:02 · 542 阅读 · 0 评论