这里我们以经典的 babyheap_0ctf_2017 讲述堆溢出,当然详情还是要去看wiki之类的资料

可以看到能开的都开了

5个选项,都看一下对应的函数

可以看到这个函数会申请(0,4096]大小的chunk

从0号index开始申请

重要的点在这里
struct chunk {
long long is_used;
long long size;
long long *chunk_addr;
}
这三行相当于定义了chunk的结构
24LL * i + a1=1 //表示chunk已被使用 v2往前看可以发现正好是我们申请的chunk的大小,所以a1 + 24LL * i + 8 代表chunk的大小 v3是我们申请的chunk的指针
关于v3我们需要了解下calloc()函数


可以看到得出来的是指针指向的地址