![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
glibc堆
文章平均质量分 84
call就不要ret
大菜鸡一个,致力于向各位师傅学习,喜爱二进制安全。热爱钻研技术
展开
-
聊聊glibc中malloc函数的unlink
它是一个链表结构,表示空闲的chunk,在ptmalloc中讲大小差不多的空闲chunk用这样的bin链表来链接起来。这一段是判断这个P的完整性,用下一个chunk的bk指针和前一个chunk的fd指针来验证是否都指向p,如果验证不完整则会调用malloc_printerr函数来报告错误。如果P指向chunk的下一个chunk是最后一个(这里有点绕,可以回看上面的图),将执行代码块内的内容。因为fd和bk其实都是指向一个chunk的头部的,千万不要以为是指向其fd或者bk的位置,我图画不好请见谅。原创 2023-06-27 15:10:56 · 647 阅读 · 1 评论 -
关于chunk的一些宏定义glibc-malloc函数(1)
这个宏的意思是计算一个最小的chunk占多大,offsetof的作用是计算malloc_chunk这个结构体中fd_nextsize的偏移是多少。上一篇博客我介绍了在堆管理中一个chunk的结构和布局,接下来我会分模块分析这些宏定义的含义和作用,这篇文章我们来解析下Size and alignment checks and conversions(大小和对齐检查与转换)这个模块,理解他们的含义。分配的最小大小是对齐的最小块。分配的内存大小会被向上调整为满足对齐要求的最小值,以保证所分配的内存是对齐的。原创 2023-06-03 19:51:21 · 210 阅读 · 0 评论 -
阅读glibc中malloc源码理解-chunk结构理解
拿32位程序来举例子,每个程序都有自己专属的4GB的虚拟空间,我们写的C代码在这个4GB空间中是有明确分布的,详情可以参考我另外一篇博客32位内存布局。我们看到一个chunk的开始其实是chunk指针指向的位置,其实这个叫chunk头,我们使用malloc申请内存的时候,会返回一个指针给我们那个指针就是我图中画的返回给用户的指针是指向用户数据。chunk头对用户来说是透明的,只有操作系统知道。接着是下一个chunk。学过操作系统的都知道,我们的内存是存在分页机制的,将内存划分为一个一个4kb的页框来管理。原创 2023-05-26 12:17:31 · 283 阅读 · 0 评论