iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0

前面有提到過,使用者正在使用的 Heap 區塊稱為 Allocated Chunk,而被 Free 掉的空間為 Free Chunk 並會依據不同大小用 Linked-list 組成不同的 bin,那究竟什麼是 Chunk 呢?

Chunk 是 glibc 管理記憶體的基本單位,當 Heap 一開始被初始化時整段 Heap 會被稱為 Top Chunk,如圖黃色整段。
image

當使用者使用 malloc() 等申請記憶體時,首先會先到昨天所述的 Bin 去尋找有沒有適合的,若沒有的話則會去 Top Chunk 分割出記憶體。如果 Top Chunk 也不夠則會使用 brk() 繼續擴充後再將已擴充的 Top Chunk 切分。

我們使用圖解來說明一下,使用 malloc() 與 free() 時的樣子。
假設我們用 malloc 申請兩塊大小 X 的 Chunk A 和 B 就會向下圖這樣:
image
當我們 free() 掉時就會變成這樣:
image


上一篇
[Day20] Heap 介紹 - Bin 機制
下一篇
[Day22] Heap 介紹 - first fit
系列文
Pwn2Noooo! 執行即 Crash 的 PWNer 養成遊戲30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言