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

后释放先分配

阈值(最大值)

和操作系统有关

results matching ""

    No results matching ""