@hol1ow 在 pwn glibc堆利用——chunk结构 中发帖
glibc动态内存分配
写C语言时,如果想申请或释放内存,就需要malloc和free函数。从linux内核层面来看,往往会用到这两个系统调用:
mmap
brk
其中,brk会将进程的heap段向内存高位扩充,可以理解为把堆顶抬高了。而mmap则在heap段和stack段之间申请匿名内存(不用担心这片区域被填满,64位系统下,你的电脑内存加起来都没它大)。
结合linux进程的简化内存分布,更加直观一些:
低地址
[text]
[data]
[bss]
[heap]
…
[mmap region]
…
[stack]
高地址
释放内存的系统调用也有两个:
munmap
brk
(没错,brk也可以收缩堆空间)
这两种分配方式的区别在于,mmap一般用来申请大块内存(默认值大约是128KB以上)
但是呢,问题出现了。每次进行系统调用时,都要从ri...