4.fastbin_dup_consolidate

ソース

1の#include <stdio.hの>
 2の#include <stdint.h>
 3の#include <STDLIB.H>
 4  
5  INT メイン(){
 6    ボイド * P1 = のmalloc0x40の)。
7    ボイド * P2 = のmalloc0x40の)。
8    関数fprintf(stderrに、" 割り当て2 fastbins:P1 =%P P2 =%P N \ " 、P1、P2)。
9    関数fprintf(stderrに、" 今、自由P1 \ N!" );
10    フリー(P1)。
11  
12    無効 * P3 = のmalloc0x400 )。
13    関数fprintf(stderrに、" malloc_consolidateをトリガするために割り当てられた大型のビン():P3 =%P \ n " 、P3)。
14    関数fprintf(stderrに、" malloc_consolidate()において、P1はソートされていないビンに移動されます。\ n " );
15    フリー(P1)。
16    関数fprintf(stderrに、" 二重解放の脆弱性をトリガ\ n個!" );
17    関数fprintf(stderrに、" p1は速いトップではありませんので、我々は、malloc関数()にチェックを渡すことができます\ N。" );
18    関数fprintf(stderrに、"今P1ソートされていないビンと速いビンです。だから、それを2回取得we'will:%pが%のp \ nを"malloc関数0x40の)、のmalloc0x40の));
 19 }

業績

checksec

 

最初のサイズ範囲のfastbin内、メモリの2つの0x40の量P1、P2を適用

リリースP1の後

)400バイトP3のために適用します(小ビントリガーmalloc_consolidateに属し

小さなビンにP1のfastbin

この時点で、p1が頭をfastbinされていません

それは再び解放することができます

リリース後

両方のP1でfastbinと小さなビン

再びアプリケーションには、次の2つの点P1のメモリを取得することができます

図デバッグを得る、ことが理解さは、最初の削除fastbin P1では、次に小さなビンP1を削除します

これは二重の自由をもたらしました

おすすめ

転載: www.cnblogs.com/pfcode/p/10989832.html