- 注意二级指针,*的作用是解引用,把它想成访问地址又形象又好理解
- 学会画图很重要
- 注意malloc的大小和实际开辟的chunk的大小
- 传给free的指针应当是指向mem的指针
- tcache中next指针指向的是mem;fastbin的fd指针指向的是chunk header
- 一个指针值为多少它就指向哪里
- 各种bin,tcache都是有一个结构体指针数组,充当着链表头
- 区分&p,p,*p
- 注意add,edit,show,delete函数的判断条件,这很重要,特别是delete有时候没有任何判断
- 基本上要打hook的情况下,最后都是要通过tcache构造:chunk->hook,再申请两次向hook里面写入东西
- 要有防止与top chunk合并的意识,每次多分配一个chunk防止与top chunk合并
- 当a是指针变量时,a->b等价为(&a).b
- 从 tcache bin 中申请堆块出来需要保证 counts > 0,一般情况下打hook时tcache结构都是1->0变成1->hook,counts>0是满足的,当特殊情况是需要留意counts > 0
- 注意到底有没有uaf可以利用,下面这个看似置0了,但是注意是栈上的置0,不影响bss段中的notes

- 注意fastbin是0x20-0x80,留意打tcache时chunk大小是fastbin
- 一般没有uaf的时候,就必须有off-by-one,不然就无法泄露,除非partial overwrite申请出stdout
- largebin attack最好用之前申请过的,反正总有奇奇怪怪的问题
- 学会伪造fake chunk泄露libcbase这个技巧,想一想free的一些检查,很容易就得到了libcbase
- 当没有edit的时候一定会打chunk overlapping,只有得到一个大的overlapping chunk之后,将其free后再add就可以实现等同于edit的功能,这是一种很常见的技巧