wiki 源码

这篇是复现wiki上面的实验

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdlib.h>
#define fake_size 0x1fe1

int main(void)
{
void *ptr;

ptr=malloc(0x10);
ptr=(void *)((long long)ptr+24);

*((long long*)ptr)=fake_size;

malloc(0x2000);

malloc(0x60);
}

分析

image-20241124221822497

首先申请了一个堆快,然后把后面的top_chunk的size改变了

注意,这里的top_chunk的大小是有要求的,因为分页机制,所以堆快的大小应该是0x1000类似的

改变的值只能是0x0fe1、0x1fe1、0x2fe1、0x3fe1这样的

在申请了大于top_chunk的值后,可以达到一个伪free的效果,在没有free函数时

image-20241124222559614

版本

2.24加了保护

2.27完全失效