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

题目信息

可以看到能开的都开了

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

Allocate

可以看到这个函数会申请(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()函数

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