这是我第一次自己做出来的堆题,,🐔动
没什么特别,,看一看代码
还是一个堆块管理系统,不过这次他管理的时候有些不一样
1.add
不一样就在这里,,如果要创建一个用户数据,,先malloc一个八字节的指针堆块(我这么叫。。里面放着指针),,这八字节,前四个字节是一个pirnt_note_content函数,,这个函数的作用是以他后面相邻四个字节的数据为指针,打印这个指针里面的内容;;;申请到的8字节后四个字节才是我们申请到的数据块的指针,这个堆块大小由我们的输入而定。
还有,这个程序同样维护着一个堆块指针表,,这个堆块指针表里面存的是指针堆块的指针。。(~rap)
最后只允许申请5次,有计数。。
刚申请了一个用户数据,堆块指针表是这样的,,一个指针4字节
申请一个数据要用两个堆块
第一行是第一个堆块,就是我说的指针堆块,,可以看到后八字节里面,,前4是0x80485fb
是这个函数的地址
后四字节是个指针,指向下一个堆块的用户数据。。
2.delete
可以看到有UAF漏洞,但是却不好利用
释放的时候先释放了用户可写的那块堆块,,然后释放了指针堆块,,所以一次delete释放了两个堆块