Unsorted bin概况

进出顺序:

FIFO 载入的时候在头部插入 unlink的时候在尾部脱

主要来源:

1.当一个较大的chunk被分割成两部分后,如果剩下的部分大于MINSIZE,则会被放进Unsorted bin中

2.释放以恶搞不属于fastbin的chunk,并且该chunk不与top chunk相邻,该chunk就会首先被放到Unsorted bin中

3.当进行malloc_consolidate(块合并)时,如果合并后的chunk不与top chunk相邻,则可能会把合并后的chunk放到Unsorted bin中

何时用:

程序malloc的时候,如果fastbin、smallbin中找不到对应大小的chunk,就会尝试从Unsortedbin中寻找chunk。

利用关键源码

/* remove from unsorted list */
if (__glibc_unlikely (bck->fd != victim)) # 低版本没有此校验 具体是哪个版本加上的有待补充
	malloc_printerr ("malloc(): corrupted unsorted chunks 3");
unsorted_chunks (av)->bk = bck;
bck->fd = unsorted_chunks (av);

存在一个校验 会校验即将脱走的unsortedbin(这里假设为AA)

会校验AA→bk→fd == AA

原链:D→C→B→A→unsorted_chunks(这是一个数组的头地址)

后链:D→C→B→unsorted_chunks

利用方式

低版本利用