當前位置:
首頁 >
pwn学习总结(四)—— 堆基础知识(持续更新)
發布時間:2025/3/21
30
豆豆
生活随笔
收集整理的這篇文章主要介紹了
pwn学习总结(四)—— 堆基础知识(持续更新)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
pwn學習總結(四)—— 堆基礎知識(持續更新)
- 前言
- chunk
- 使用中(分配后)
- 空閑中(釋放后)
- 堆塊大小
- 空間復用
- bins
- fastbin
- unsorted bin
- small bin
前言
學習自《glibc內存管理ptmalloc源代碼分析》莊明強 著
部分資料參考自互聯網
chunk
描述:
結構體:
struct malloc_chunk {INTERNAL_SIZE_T prev_size; /* Size of previous chunk (if free). */INTERNAL_SIZE_T size; /* Size in bytes, including overhead. */struct malloc_chunk* fd; /* double links -- used only if free. */struct malloc_chunk* bk;/* Only used for large blocks: pointer to next larger size. */struct malloc_chunk* fd_nextsize; /* double links -- used only if free. */struct malloc_chunk* bk_nextsize; };使用中(分配后)
chunk start:chunk的起始地址
previous size:
size:
A:為0表示該chunk屬于主分配區,為1表示該chunk屬于非主分配區
M:表示當前chunk是從哪個內存區域獲得的虛擬內存。為1表示該chunk是從mmap映射區域分配的,否則是從heap區域分配的
P:為1表示前一個chunk正在使用中,當前chunk的prev_size無效,不能對前一個chunk進行任何操作。第一塊heap總是將P設為1,以防止程序引用到不存在的區域
memory:malloc等函數返回給用戶的chunk數據區指針
空閑中(釋放后)
描述:
fd:指向前一個空閑chunk的起始地址,32位占4字節,64位占8字節
bk:指向后一個空閑chunk的起始地址,32位占4字節,64位占8字節
注意:事實上,釋放后的large block中還存在另外兩個成員:fd_nextsize和bk_nextsize,后續再作介紹
堆塊大小
32位程序:
64位程序:
空間復用
描述:當一個 chunk 處于使用狀態時,它的下一個 chunk 的 prev_size 無效。所以下一個 chunk 的 prev_size 也可以被當前 chunk 使用,這就是 chunk 的空間復用
bins
描述:
fastbin
描述:
unsorted bin
描述:
small bin
描述:
總結
以上是生活随笔為你收集整理的pwn学习总结(四)—— 堆基础知识(持续更新)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows驱动开发学习笔记(七)——
- 下一篇: pwn学习总结(五) —— 堆溢出经典题