pwn学习总结(四)—— 堆基础知识(持续更新)
生活随笔
收集整理的這篇文章主要介紹了
pwn学习总结(四)—— 堆基础知识(持续更新)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
pwn學(xué)習(xí)總結(jié)(四)—— 堆基礎(chǔ)知識(shí)(持續(xù)更新)
- 前言
- chunk
- 使用中(分配后)
- 空閑中(釋放后)
- 堆塊大小
- 空間復(fù)用
- bins
- fastbin
- unsorted bin
- small bin
前言
學(xué)習(xí)自《glibc內(nèi)存管理ptmalloc源代碼分析》莊明強(qiáng) 著
部分資料參考自互聯(lián)網(wǎng)
chunk
描述:
結(jié)構(gòu)體:
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屬于主分配區(qū),為1表示該chunk屬于非主分配區(qū)
M:表示當(dāng)前chunk是從哪個(gè)內(nèi)存區(qū)域獲得的虛擬內(nèi)存。為1表示該chunk是從mmap映射區(qū)域分配的,否則是從heap區(qū)域分配的
P:為1表示前一個(gè)chunk正在使用中,當(dāng)前chunk的prev_size無效,不能對前一個(gè)chunk進(jìn)行任何操作。第一塊heap總是將P設(shè)為1,以防止程序引用到不存在的區(qū)域
memory:malloc等函數(shù)返回給用戶的chunk數(shù)據(jù)區(qū)指針
空閑中(釋放后)
描述:
fd:指向前一個(gè)空閑chunk的起始地址,32位占4字節(jié),64位占8字節(jié)
bk:指向后一個(gè)空閑chunk的起始地址,32位占4字節(jié),64位占8字節(jié)
注意:事實(shí)上,釋放后的large block中還存在另外兩個(gè)成員:fd_nextsize和bk_nextsize,后續(xù)再作介紹
堆塊大小
32位程序:
64位程序:
空間復(fù)用
描述:當(dāng)一個(gè) chunk 處于使用狀態(tài)時(shí),它的下一個(gè) chunk 的 prev_size 無效。所以下一個(gè) chunk 的 prev_size 也可以被當(dāng)前 chunk 使用,這就是 chunk 的空間復(fù)用
bins
描述:
fastbin
描述:
unsorted bin
描述:
small bin
描述:
總結(jié)
以上是生活随笔為你收集整理的pwn学习总结(四)—— 堆基础知识(持续更新)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows驱动开发学习笔记(七)——
- 下一篇: pwn学习总结(五) —— 堆溢出经典题