02.free
复制本地路径 | 在线编辑
Free 相对就简单了许多
https://blog.csdn.net/Plus_RE/article/details/79258536
./malloc/malloc.c/_int_free
1. 简单检查,具体见源码实现,反正就是检查内存地址对其,Prev_inuse 是否正确等等
2. 如果满足 Tcache bins, Fast bins,直接放入
* 说明:此时别的什么都不做,比如->下一块的Prev_inuse,不进行合并
3. 检查 Free 的内存是否通过 mmap() 得到的,如果是,则下面工作交给 munmap_chunk()
4. 说明不符合 Fast bins 要求,那就放入 Unsorted bins
* 步骤1:检查后一个块是否空闲,空闲合并,利用(prev_inuse)即可
* 步骤2:检查前一个块是否空闲,空闲合并,利用(size)得到 nextchunk 的指针位置,然后就可以得到(nextchunk->size),然后就可以得到(next->next),然后就可以得到(next->next->prev_inuse)
* 步骤3:算是步骤2的补充,如果前一个块是Top chunk,合并完就不放入Unsorted bins了,就简单地融入Top chunk就好了
5. 疑问点:前一个和后一个搞不懂,/home/allen/Downloads/06-heap-exploits_173105610.pdf,第3页,Top Chunk究竟是在上面还是在下面