mallocのメモリ管理
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/22 07:15 UTC 版)
「バッファオーバーラン」の記事における「mallocのメモリ管理」の解説
より高度なヒープベースバッファオーバーフロー攻撃手法を説明する為の準備として、mallocのメモリ管理方法を説明する。なおメモリ管理方法の詳細はmallocの実装に依存するため、実行環境によって細かなところは下記の説明と異なる部分があるので注意されたい。 mallocは未使用なヒープ領域(の一部)をメモリプールとして管理しており、メモリプールは複数のchunkと呼ばれる単位からなっている。プログラム中でmallocが実行されるたびに、管理しているchunkの中から適切なサイズのものをプログラムに返す。適切なサイズのchunkがない場合は、システムコールにより新たなchunkを確保してプログラムに返す。mallocはchunkを(サイズ毎に異なる複数の)連結リストとして管理しており、chunkをプログラムに渡す際にこの連結リストからchunkを削除し、プログラムがメモリ領域をfreeすると、freeされたchunkが連結リストに加わる。 chunkは連結リストとして管理されているので、各chunkには「次のchunk」を指定するポインタ(Windowsでは「flink」、linuxでは「fd」)や「前のchunk」を指定するポインタ(Windowsでは「blink」、linuxでは「bk」)がある。 未使用chunkと隣接するメモリ領域が開放された場合は、開放されたメモリ領域と未使用chunkとを連結(coalesce)する事で1つの大きなchunkを作って管理する。
※この「mallocのメモリ管理」の解説は、「バッファオーバーラン」の解説の一部です。
「mallocのメモリ管理」を含む「バッファオーバーラン」の記事については、「バッファオーバーラン」の概要を参照ください。
- mallocのメモリ管理のページへのリンク