Reference
https://sourceware.org/glibc/wiki/MallocInternals
https://sploitfun.wordpress.com/2015/02/10/understanding-glibc-malloc/
http://www.freebuf.com/news/88660.html
Chunk
一般linux下heap头结构如下
struct malloc_chunk {
INTERNAL_SIZE_T prev_size;
INTERNAL_SIZE_T size;
struct malloc_chunk * fd;
struct malloc_chunk * bk;
};
结构
不使用bk,是单链表结构,一个块的结构如下
struct malloc_chunk
{
INTERNAL_SIZE_T prev_size;//为0
INTERNAL_SIZE_T size;//当前堆块大小
struct malloc_chunk * fd;//fd->后一个块(仅free之后有意义,free之前为数据块)
struct malloc_chunk * bk;//为0
}
下面是一个大致的fastbin缩略图
free
当符合fast-bin大小的堆块释放的时候,将堆块放入堆块尾部。
下面是自己简化的针对fastbin malloc的理解
// malloc_ptr 为malloc返回的指针
malloc_ptr = top_ptr + 0x10
// top_ptr 是图中的0x8040b030
top_ptr = top_ptr->fd;
FIFO
后释放先分配
阈值(最大值)
和操作系统有关