Chunk Extend & Overlap
顾名思义,堆扩展和堆重叠
我的理解是堆扩展是为堆重叠服务的,chunk overlap之后我们可以控制堆的内容
overlap在先前Unlink一文中已经提及过向前overlap,向前也是主要的利用方法,因为它更容易实现
extend的原理比较简单不再赘述,主要讲overlap
Principle
ptmalloc 通过 chunk header 的数据判断 chunk 的使用情况和对 chunk 的前后块进行定位。简而言之,chunk extend 就是通过控制 size 和 pre_size 域来实现跨越块操作从而导致 overlapping 的。
通常是因为堆溢出(off-by居多)导致的overlap(自己的经验)
DEMO
向前Overlap
向前overlap需要fake后一堆块的pre_size和 pre_inuse
和之前unlink中的操作一致
1 | /*demo2.c |
向后Overlap
1 | /*demo1.c |