题目链接:Github
参考链接:传送门
堆的一些基础这里就不再介绍了,网上有很多,也可以加qq群一起讨论:946220807
准备开始正文
读懂题目
拿到题目,开启我们的IDA查看伪代码。运行程序并没有使用帮助,只能自己慢慢琢磨了。
可以看到输入不同的数字对应不同的函数(ida不同函数名可能也不同),共4个函数:
- fill() :这个函数用来向分配的空间填充数据。
- free_chunk():用来释放malloc分配的空间
- print():没什么卵用,本以为是打印用户的数据的,啥也不输出。
- alloc():这个函数用malloc分配空间供用户使用,并且把返回的指针放到全局数组global中。
函数具体实现方法点进去看看就清楚了。就不再多解释了。
思路
我们发现填充数据的时候并没有限制大小,导致我们可以填充某一个chunk而覆盖下一个chunk。