iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 5
0
Security

資安隨意分享的30天系列 第 5

Day5 - TCACHE 介紹(三)

正文

今天來講昨天結尾說的兩個情況

chunk 放到 TCache 中

這會有兩個情況:

  1. free 時,只要 size 是 fastbin / smallbin 的,會優先放到 TCache 中
  2. 如果 malloc 是從 fastbin/ smallbin 中取,那他會同時檢查底下有沒有其他的 chunk ,有的話會一併補到 TCache 中

第一個情況

就照字面意思,只要 free(chunk) 時,chunk 是 fastbin/smallbin ,就會優先放到

tcache 裡面,不過預設同樣 size 下最多只會存 7 個,換句話說

假設今天有 a1,a2,a3 ... a10 有這十個 fastbin 大小的 chunk ,則

free(a1)
free(a2)
free(a3)
free(a4)
free(a5)
free(a6)
free(a7)
free(a8)
free(a9)
free(a10)

這樣依序 free 下來時, a1 ~ a7 會放到 tcach 中,從 a8 開始會改放回 fastbin

變回本來的 heap 機制上

第二個情況

這邊先假設現在環境是剛剛上面第一個情況那樣,就是先 free 了 a1 ~ a10

那現在如果開始 malloc 7 次,這樣他會把 tcache 中存的 7 個都拿走

第八次 malloc 會取到 a10 (FILO) 且是從 fastbin 中取的,

那他取到 fastbin chunk 的當下,會同時檢查底下有沒有其他空閒的 chunk

所以會看到有 a8 和 a9 嘛,這時他就會把 a8 和 a9 放到 tcache 裡面

這裡要注意的是,因為是 FILO ,所以 fastbin 和 tcache 存的順序會顛倒

也就是本來在 fastbin 中應該是 a9 -> a8

存到 tcache 會變成 a8 -> a9


chunk 從 TCache 中取出來

取出來的情況只有一個就是只要你 malloc 的 size 是 fastbin / smallbin 的,

都會優先從 TCache 中取,除非 TCache 中沒有,才會變回走本來的 heap 機制


上一篇
Day4 - TCACHE 介紹(二)
下一篇
Day6 - TCACHE Exploitation
系列文
資安隨意分享的30天30

尚未有邦友留言

立即登入留言