今天打完比赛身心疲惫,来复习复习把,写一点简单的把
之所以记录一下fastbin,是因为现阶段我能接触到最多的就是它了。
fastbins:
程序中总是会分配一些比较小的堆块,对于这些堆块来说,如果我们直接将他们合并,那么下次申请的时候还需要重新切割出来,降低了运行的效率,所以ptmalloc设计了fastbins.
fastbins共有10个bin,分别是8-80字节,依次增加8.
使用了单链表结构对每个bin进行管理,所以只有fd有意义。
且最近被释放的chunk会被最先索引,并且最近被释放的chunk会指向前一个释放的chunk(同一个bin中的)。
当用户需要的 chunk 的大小小于 fastbin 的最大大小时, ptmalloc 会首先判断 fastbin 中相应的 bin 中是否有对应大小的空闲块,如果有的话,就会直接从这个 bin 中获取 chunk。
fastbin中的chun的inuse位始终被置为1,防止其被合并
fastbin_dup:
how2heap上的一篇教程:
#include <stdio.h>
#include <stdlib.h>
int main()
{
fprintf(stderr, "This file demonstrates a simple double-free attack with fastbins.\n");
fprintf(stderr, "Allocating 3 buffers.\n");
int *a = mall