glibc内存管理ptmalloc - 实时打印bin链的变化

news2024/11/15 23:53:35

前言

在《glibc内存管理ptmalloc - largebin》中我们详细解释了

  1. largebins共63个,并用表格点出了每个bin的size的范围
  2. largebin在free一些内存后的状态

特别是第2点,我其实不太满意,因为只有全部free后的一个结果,并没有中间状态。比如一个chunk是如何到的unsortedbin, 又如何从unsortedbin move到的largebin? 如果能把这个变化的过程打出来,对照着源码理解起来岂不美哉?!

确实有个工具叫pwndbg,它有些命令(largebins, heap)可以打印这些链表,我们在bin链的头上watch,只要头变了我们就调用heap打印链表的内容。当然我们可能打在一个链表变化的中间状态(下文有提到)上,比如头已经改变但它还没指向以前的头,先不管三七二十一,试试再说。

注:所用代码还是上节的

pwndbg第一印象

pwndbg的安装大家去github上找吧,我把它安装在redhat9上,对应的glibc版本是2.34,来个“第一印象”:

 heap命令打印了各个chunk的信息,largebins -v命令不仅列出了链表的内容而且给出了各个链表的size范围,应该与我们上节制作的表格相符,我大概看了几个都对得上。

除此之外,还有fastbins, smallbins, unsortedbin命令。

实时打印链表变化

重新运行到第20行for-free, 

找到存储unsortedbin链表头的地方:

watch unsortedbin & 第一个largebin 

说点题外话:FD链已串好,BK链还没有放入 0x4052b0. 

这应该是显示corrupted的原因,也是我一开始担心的(链表变化的中间状态)

验证下0x4052b0:

我就不在一步步执行了,continue n次,unsortedbin变化如下:

 后面的largebin的变化不再赘述。

理论上我们能把arena中所有的bin头都watch起来,甚至arena.top也watch起来,这样就能看到ptmalloc管理内存的基本脉络了,甚至可以改改pwndbg的代码新添加一个这样的命令。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1549013.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【jenkins+cmake+svn管理c++项目】jenkins回传文件到svn(windows)

书接上文:创建一个项目 在经过cmakemsbuild顺利生成动态库之后,考虑到我一个项目可能会生成多个动态库,它们分散在build内的不同文件夹,我希望能将它们收拢到一个文件夹下,并将其回传到svn。 一、动态库移位—cmake实…

工作12年了,我还没能过上自己想要的生活

写这篇文章之前,我想了很久,不知道该如何下笔,如何向读者说明这些年我是怎么走过来的,我只是依稀的记得当时的自己犹如在昨天。 2009年大学毕业,我和大多数的毕业生一样写简历求职。不管是招聘会还是网上投简历&#x…

容器网络隔离验证

结论,可以直接扫描内网路由能通的机器。 1.节点1 192.168.55.6 2.节点2 192.168.55.5 3.非节点3 192.168.55.3

4005.K次取反后最大化的数组和

// 定义一个名为Solution的类 class Solution {// 定义一个public方法largestSumAfterKNegations,输入参数为一个整数数组nums和一个整数K,返回值类型为整数public int largestSumAfterKNegations(int[] nums, int K) {// 使用Java流对数组中的元素进行操…

win11 环境配置 之 Jmeter

一、安装 JDK 1. 安装 jdk 截至当前最新时间: 2024.3.27 jdk最新的版本 是 官网下载地址: https://www.oracle.com/java/technologies/downloads/ 建议下载 jdk17 另存为到该电脑的 D 盘下,新建jdk文件夹 开始安装到 jdk 文件夹下 2. 配…

1111111111111111111111111111111111

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

ClickHouse初体验

1.clickHouse是啥? ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库(DBMS),使用 C语言编写,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告 2.clickHouse的特点 2.1列式存储 对于列的聚合&…

Java零基础入门到精通_Day 3

37 switch default: 后面的break;可以省略 38 春夏秋冬 注意事项:在switch语句中,如果case控制的语句体后面不写break,将出现穿透现象,在不判断下一个case值的情况下,向下运行 直到遇到break,或者整体swi…

班级综合测评管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)

本项目包含可运行源码数据库LW,文末可获取本项目的所有资料。 推荐阅读100套最新项目持续更新中..... 2024年计算机毕业论文(设计)学生选题参考合集推荐收藏(包含Springboot、jsp、ssmvue等技术项目合集) 目录 1. …

opengl草稿复习,承上启下

目录 1、链接文件夹中的cpp 2、链接资源到输出目录 3、多编译目标 4、cmakelist添加库 4、添加glfw和glad 5、glfw运行 6、NDC、VBO、VAO 7、渐变三角形 8、渲染两个三角形 9、渲染两个三角形,同时基于原来颜色进行渐变 1、链接文件夹中的cpp cmake_minimu…

一本书掌握数字化运维方法,构建数字化运维体系

文章目录 前言主要内容读者对象 前言 数字化转型已经成为大势所趋,各行各业正朝着数字化方向转型,利用数字化转型方法论和前沿科学技术实现降本、提质、增效,从而提升竞争力。 数字化转型是一项长期工作,包含的要素非常丰富&…

React和Vue.js的有什么区别

在当今前端开发领域,React 和 Vue.js 作为两大热门的前端框架备受开发者关注。它们各自拥有独特的特点和优势,在实际项目中有着广泛的运用。本文将深入探讨 React 和 Vue.js 之间的区别,从组件化方式、数据绑定、模板语法以及生态系统和工具支…

鸿蒙HarmonyOS应用开发之C/C++标准库机制概述

OpenHarmony NDK提供业界标准库 libc标准库、 C标准库 ,本文用于介绍C/C标准库在OpenHarmony中的机制,开发者了解这些机制有助于在NDK开发过程中避免相关问题。 1. C兼容性 在OpenHarmony系统中,系统库与应用Native库都在使用C标准库&#…

linux磁盘管理大全

1、磁盘接口类型 #外部结构分类 1、机械硬盘{转速} 2、固态硬盘 ​ 了解 1、IED 淘汰 2、SCSI 淘汰 3、SATA 笔记本 台式机 家用 4、SAS 企业标配 5、PCI-E 企业标配 2、磁盘转速 磁盘转速决定了磁盘读写速度 磁盘越大,存储速度越小。磁盘转速如…

分页-PageHelper原理以及实时分页-键集分页

一.PageHelper原理 1.使用 PageHelper 是国内非常优秀的一款开源 mybatis 分页插件,它支持常用的主流数据库,例如 Oracle、Mysql、MariaDB、SQLite、Hsqldb 等。 PageHelper 的安装很简单,只需要在 pom.xml 中加入以下依赖即可&#xff1a…

pin脚的缺陷检测

忍不住 我才是最大的缺陷首先应该学好表达头脑风暴分割paddledetection小目标检测也不行缺陷检测1.缺陷标注修改代码为自己的数据集训练训练结果结果图片 结论再次出发 我才是最大的缺陷 真的,我真的被整无语了。测测测测,测个鬼。一天天的净整些没用的…

隐蔽处工程监管系统

随着科技的飞速发展,信息化、智能化已经成为各行各业发展的必然趋势。在工程建设领域,传统的监管方式已经难以满足现代工程管理的需求。为了提高工程监管的效率和精度,信鸥科技倾力打造了一款全新的工程监管系统,为工程建设行业带…

14:有效的符号

给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括…

XSS学习(cookie远程登录演示)

1.HTTP特点: 1.请求应答模式。 2.灵活可扩展 3.可靠传输 4.无状态。 这里给大家举一个例子: HTTP是无状态的,所按理来说我每进行一次会话,比如我在CSDN发一个帖子,好像按理来以说我都要进行一次重新登陆&#xff0…

3.4 CSS取值与单位

3.4.1 数字 数字取值是在CSS2中规定的&#xff0c;有三种取值形式如表3-3所示。 3.4.2 长度 长度取值<length>是在CSS2中规定的&#xff0c;表示方法为数值接长度单位。可用于描述文本、图像或其他各类元素的尺寸。 长度取值的单位可分为相对长度单位和绝对长度单位。相…