首页 > 其他分享 >堆相关

堆相关

时间:2025-01-19 12:43:46浏览次数:1  
标签:struct chunk content fd 相关 空闲 size

知识点

chunk结构

我们称由 malloc 申请的内存为 chunk,这块内存在 ptmalloc 中被称为 malloc_chunk 结构体表示

无论一个 chunk 的大小如何,处于分配状态还是释放状态,它们都使用一个统一的结构。虽然它们使用了同一个数据结构,但是根据是否被释放,它们的表现形式会有所不同

/*
  This struct declaration is misleading (but accurate and necessary).
  It declares a "view" into memory allowing access to necessary
  fields at known offsets from a given base. See explanation below.
*/
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;
};

prev_size:如果前一个 chunk 是空闲的话,记录物理相邻前一个 chunk 的大小;否则存储前一个的数据

size:该 chunk 的大小,必须是 2*SIZE_SZ 的整数倍,后三位分别是:

  • NON_MAIN_ARENA(A):表示该 chunk 属于主分配区(1)或者非主分配区(0)
  • IS_MAPPED(M):记录当前 chunk 是否是由 mmap 分配的,M 为 1 表示该 chunk 是从 mmap 映射区域分配的,否则是从 heap 区域分配的
  • PREV_INUSE(P):记录前一个 chunk 块是否被分配。一般来说,堆中第一个被分配的内存块的 size 字段的 P 位都会被设置为 1,以便于防止访问前面的非法内存。当一个 chunk 的 size 的 P 位为 0 时,我们能通过 prev_size 字段来获取上一个 chunk 的大小以及地址。这也方便进行空闲 chunk 之间的合并。

fd、bk:chunk 处于分配时从 fd 字段开始就是用户数据了

​ chunk 空闲时 会被添加到对应的空闲管理链表中

  • fd:指向下一个(非物理相邻)空闲的 chunk

  • bk:指向上一个(非物理相邻)空闲的 chunk

  • 通过 fd 和 bk 可以将空闲的 chunk 块加入到空闲的 chunk 块链表进行统一管理

fd_nextsize, bk_nextsize,也是只有 chunk 空闲的时候才使用,不过其用于较大的 chunk(large chunk)

  • fd_nextsize:指向前一个与当前 chunk 大小不同的第一个空闲块,不包含 bin 的头指针。
  • bk_nextsize:指向后一个与当前 chunk 大小不同的第一个空闲块,不包含 bin 的头指针。

一般空闲的 large chunk 在 fd 的遍历顺序中,按照由大到小的顺序排列。这样做可以避免在寻找合适 chunk 时挨个遍历。

例题

参考自好好说话之Use After Free-CSDN博客

先申请两个struct_chunk,同时struct_chunk的userdata的第二个(最后一个)指向了一个content_chunk.

注意struct_chunk的大小为8字节,content_chunk大小由content大小确定,所以我们不能让content为8字节,不然后面拿堆的时候会把content_chunk再拿到.

按顺序free掉struct_chunk0和struct_chunk1,然后申请内容为p32(magic)的node.

此时这个note2的struct_chunk是原来的struct_chunk1空间,content_chunk是原来的struct_chunk0空间.notelist[0]是新node

然后p32(magic)会存储在content_chunk的userdata前八位,也就是struct_chunk0的userdata的前八位.这个刚好是struct_chunk0的函数指针的部分.

此时调用printnote(0)会执行后门函数

标签:struct,chunk,content,fd,相关,空闲,size
From: https://www.cnblogs.com/r0xy/p/18679488

相关文章

  • 【ESP 乐鑫相关】ESP32-S3启动流程
    转载自:https://blog.itpub.net/70040860/viewspace-3053923/ESP32-S3启动流程    本文将会介绍ESP32-S3从上电到运行app_main函数中间所经历的步骤(即启动流程)。从宏观上,该启动流程可分为如下3个步骤。    ①:一级引导程序,它被固化在ESP32-S3内部的ROM中,它会从flas......
  • 微积分相关教学内容
    微积分相关教学内容数学是一个可以改变自身直觉,使自身直觉更符合客观规律的工具微积分是数学的一个重要分支,主要研究变化率和累计量。它有两个主要的部分:微分学和积分学。1.微分学(DifferentialCalculus)微分学主要研究“变化率”。最基本的概念是导数。可以把导数理......
  • 多项式相关
    我学科技?真的假的?起因是在做斯特林数,发现没事就要佛佛塔或者呢塔塔,遂学之。FFT多项式乘法现在要求两个多项式的卷积。卷积现在给你两个序列\(a_i,b_i\)并定义\(c_i\)为\[c_i=\sum_{p+q=i}a_ib_i\]可以认为\(c_i\)就是\(a_i,b_i\)的卷积。换句话说就是给你两个多项......
  • 数据流应用程序:特点、部分、框架、实例、相关学术分享
    目录关键特点组成部分技术框架应用实例相关学术会议分享数据流应用程序是一种处理实时数据流的程序。这类应用程序能够接收、处理和分析连续不断的数据流,并实时生成结果或执行特定的操作。关键特点实时性:数据流应用程序能够实时处理数据,进行快速响应,以便及时捕捉事件......
  • HAL库 相关单词注解表示(持续更新)
    SET/RESET------(1/0)通常用于表示将某个位、寄存器或标志设置为特定的值(通常 SET 表示设置为1,RESET 表示设置为0 Pin------引脚在嵌入式开发中,“PIN”通常指“引脚(Pin)”,即芯片或电子元件上用于连接外部电路或与其他设备进行通信的金属接触点。support------支持在......
  • 12.python的bug、异常相关
    提示:12.python的bug、异常相关文章目录bugpython异常处理机制常见异常类型bug1.语法错误SyntaxError  使用了中文符号,input输入的是字符类型误用等自查表2.索引超出错误IndexError  索引超出列表范围python异常处理机制解决方案:异常处理机制,......
  • 转:gunicorn相关配置
    转自:https://blog.csdn.net/xu710263124/article/details/118975404 一、gunicorn的简介 Gunicorn是基于unix系统,被广泛应用的高性能的PythonWSGIHTTPServer。用来解析HTTP请求的网关服务。它通常是在进行反向代理(如nginx),或者进行负载均衡(如AWSELB)和一个web应用(比如D......
  • 嵌入式_相关英文(不定时更新...)
    一、在嵌入时准备阶段、linux基础时接触的专业英文(1)知识点中的单词Crack:破解,裂开virtualmachine:虚拟机terminal:终端,站台Permissiondenied:权限不允许password:密码remove:删除regular:普通的necessary:必须的catch:抓取omitting:省略,遗漏insert:插入wave:保存quit:退......
  • Linux基础03:用户相关操作 + 用户组相关操作 + 权限管理
    主要内容用户相关操作用户组相关操作权限管理用户和用户组基础1.计算机通过用户名和密码识别用户。2.Linux中新建用户后,需要设置密码。3.系统有一个特殊的用户root,这个被称为超级用户,一般会默认。4.用户组:把几个用户归在一起,这样的组被称之为用户组,规定文件所属用户组......
  • 实现数字图像相关(DIC)方法的计算的Matlab代码
    实现数字图像相关(DIC)方法的计算的Matlab代码文件列表Correlation_Tracking_Guide_2010-Dateien/colorschememapping.xml , 314Correlation_Tracking_Guide_2010-Dateien/filelist.xml , 1866Correlation_Tracking_Guide_2010-Dateien/image001.png , 17520Correlation_......