美文网首页
碰到编译优化的问题

碰到编译优化的问题

作者: icingFire | 来源:发表于2019-05-29 17:29 被阅读0次

    今天想通过free伪造fast bin trunk,代码如下:

    int main()

    {

            char *p = (char *) malloc(10);

            long arr[20];

            arr[0] = 0;

            arr[1] = 0x20;

            arr[2] = 0;

            arr[5] = 200;

    //      printf("%p\n", p);

            free(p);

            free(&arr[2]);

            printf("%lu %p\n", arr[1],arr[2]);

            return 0;

    }

    发现不注释printf("%p\n", p);能得到正确的结果,注释掉后运行报错。

    *** Error in `./fastbinfree': corrupted size vs. prev_size: 0x00007fffb448ae80

    怀疑编译优化导致的,于是在编译选项增加了 -O0 强行关闭优化,但运行依旧报错!

    上IDA,反编译 -O0 得到的bin:

    v7 = __readfsqword(0x28u);

      ptr = malloc(0xAuLL);

      v5 = 0LL;

      v6 = 200LL;

      free(ptr);

      free(&v5);

      printf("%lu %p\n", 32LL, v5);

    发现栈数据 arr[1] = 0x20 的赋值被忽略,导致fast bin构造失败。

    看来 -O0 也挡不住gcc的优化啊

    相关文章

      网友评论

          本文标题:碰到编译优化的问题

          本文链接:https://www.haomeiwen.com/subject/jctutctx.html