malloc_trim的手册页说它释放了空闲内存,所以如果堆中有分配的内存,它将不会释放整个堆.如果你知道你仍然需要一定数量的内存,那么参数就在那里,因此释放更多内容会导致glibc以后不得不做不必要的工作.至于漏洞,这是内存管理和向OS返回内存的标准问题.程序可用的主要低级堆管理是brk和sbrk,他们所能做的就是通过更改顶部来扩展或缩小堆区域.因此他们无法向操作系统返回漏洞;一旦程序调用sbrk来分配更多堆,只有当该空间的顶部空闲且可以返回时才能返回该空间.

请注意,还有其他更复杂的方式来分配内存(例如,使用匿名mmap),这些方法可能具有与基于sbrk的分配不同的约束.

 

sbrk(0)返回堆 增长的头部位置,malloc返回未分配(glibc)的地址 开始(第一次分配如下图所示)

 

 通过 brk,sbrk, malloc  深刻理解,内存动态管理

 

posted on 2021-09-18 14:54  redman274  阅读(38)  评论(0编辑  收藏  举报