ptmalloc

来源:互联网 发布:酷狗直播mac版 编辑:程序博客网 时间:2024/05/29 19:20

ptmalloc - 如何让其崩溃

我的上一篇文章写的是malloc的最终章,那么你是不是猜下一篇就是写free,我也是这样想的,然而。。。并不是,free的代码我大概扫了一下,实在是名不符其实。真令我失望的free,干脆下次再写把。这次我写些可以玩崩malloc的代码。


sbrk

#include <stdio.h>#include <stdlib.h>#include <stdint.h>#include <malloc.h>#include <unistd.h>#include <errno.h>int main(void){    void   *first = malloc(32);    void   *second = malloc(10240);    malloc_stats();    if (sbrk(-10240) == NULL) {        perror("sbrk");        return  -1;    }    void   *third = malloc(131040);    malloc_stats();    free(first);    free(second);    free(third);    return  0;}

效果

Segment fault

原因

malloc申请内存是通过sbrk和mmap,sbrk是通过增长program break,那么,如果你sbrk(-size),就等于缩减program break,malloc访问到已经释放的段,肯定会挂的。

你可能在想,那我sbrk(size),不缩减行么,可以倒是可以,malloc里面会处理sbrk后断开的情况。

建议

malloc和sbrk尽量不要同时使用。

(以后继续补充)

原创粉丝点击