ptmalloc总结

Posted    on 2018, Mar22, Thursday 15:09:34
Modified on 2018, Mar22, Thursday 15:09:38

Tags: pwn heap

花了几天看了一下ptmalloc的源码,同时也解答了心中的一些疑惑,一些关键的流程,以及一些利用技巧在这总结一下

malloc

malloc的源码在malloc.c中,推荐搜索注释 —— malloc ,_int_malloc为malloc的本体

malloc流程如下:

// av为当前堆的arean的指针 nb为申请的大小被转换为chunk大小

if (av == NULL) //  如果是main_arean则在第一次malloc就被初始化了,不会在这初始化
  return sysmalloc(nb, av);

if (nb <= global_max_fast) { //global_max_fast是glibc中的一个全局变量
  // 如果有fastbin则脱出fastbin并返回
}

if (in_smallbin_range (nb)) {
  // 如果找到了smallbin则脱出smallbin并返回
} else {
    malloc_consolidate (av); // 该函数作用为将所有fastbin放入unsortedbin,能合并chunk则合并chunk
    // 换句话来讲 如果申请一个largebin就可以触发这个
}

for (;; ) {

}
  1. 确定当前arean是否初始化,如果未初始化则调用 sysmalloc 进行初始化

  1. 如果需要的大小在smallbin范围内,尝试从smallbin找chunk,找到则直接返回

  2. 否则

附录

glibc源码 : https://github.com/bminor/glibc

堆利用流程图 : heap.png

ptmalloc源码分析: glibc内存管理ptmalloc源代码分析.pdf