我目前正在学习堆利用和溢出。但目前我遇到了一些问题。 当我尝试使用gdb检查堆内存时,我正在使用glibc v2.19。
以下是我正在使用的代码。
char *p;
p = malloc(20);
strcpy(p,"AAAAAAAA");
free(p);
这是分配的chunck的gdb输出。
(gdb) x/4xw 0x0804b008-8
0x804b000: 0x00000000 0x00000019 0x41414141 0x41414141
这是未分配的chunck的gdb输出。
(gdb) x/4xw 0x0804b008-8
0x804b000: 0x00000000 0x00000019 0x00000000 0x41414141
我可以看到大小字段在重新分配后没有改变,所以这可能是怎么样以及分配器如何知道这是一个免费的chunck?因为据我所知,大小的前3位用作状态标志。
为什么下一个指针" 0x0000000"是不是指向任何地方?
为什么指向prevoius chunck" 0x41414141"没用过?
在这种情况下,分配器如何寻找免费的chuncks?
我也试图释放两个连续的chuncks,在我释放第二个之后,prevoius大小字段应该被用作prevoius免费块的大小也不会被使用它只是零。