CTF-PWN-堆-【前置知识】

news2024/12/22 20:20:37

CTF-PWN-堆

    • 申请堆块
    • main_areana
    • brk&sbrk函数
    • malloc
    • free
    • free后
    • top chunk

由malloc alloc realloc 函数分配
chunk的前指的是地址低的,chunk的高指的是地址高的

申请堆块

ptmalloc2堆管理器: 通俗的讲就是相当于一个”中间商”,在程序想要申请向系统申请堆空间时,这里的 ptmalloc2 就会申请一块很大的空间,然后把用户真正的空间部分分配给用户。

main_areana

main_arena 其实就是 ptmalloc2 堆管理器通过与操作系统内核进行交互申请到的(比自己所要申请的大)

牢牢记住
在这里插入图片描述

malloc得到的内存地址为user data部分 (参数为0 为系统允许堆的最小内存块 为负数 会对于无符号数会贼大 所以可能失败)
presize字段:前一地址chunk被free则记录前一个chunk大小(包括chunk头)若没有被free则可用被前一个chunk存储数据。通过pre_size字段来获取上一个chunk的大小及地址(空间复用:当一个chunk没有被free时,它的下一个chunk的prev_size可以被当前chunk使用。prev_size已经有值时,下一个chunk被free了,prev_size不会被清掉。如果是已经free掉的了,他的pre_size也能被前一个chunk使用)

size字段:当前堆块大小(chunk头+userdata)大小必须是2SIZE_SZ的整数倍,若不是
当请求为小于2
SIZE_SZ时此时分配2SIZE_SZ
当请求大于2
SIZE_SZ的n倍却小于2SIZE_SZ的n倍+SIZE_SZ时,分配2SIZE_SZ的n倍
当请求大于2SIZE_SZ的n倍+SIZE_SZ却小于2SIZE_SZ的(n+1)倍时,分配2*SIZE_SZ的(n+1)倍
有点四舍五入的感觉

该字段的底三位对chunk大小没影响(因为size大小2*SIZE_SZ的整数倍)
倒数第三位A:no_main_arena:0表示为主线程分配的 1为非主线程分配的
倒数第二位M:is_mapped:1从mmap 0为heap
倒数第一位P:prev_inuse:0为上一个chunk被free 1为没有被free
64位最小:16+8+8 size:16+8+8+1
32位最小:8+4+4 size:8+4+4+1

user data字段:64位最小:16
32位最小:8

brk&sbrk函数

start_brk和brk,他们分别表示堆块的开始地址和结束地址
初始时
如果开启ALSR:start_brk和brk相同且为数据段末尾后
如果没开启ALSR:start_brk和brk相同切为数据段末尾后随即偏移处
sbrk函数
定义:传参0时可以获取当前brk指针的值,传参num时可以将当前brk指针的值增加拓展num字节(传参整数是增加,传参负数是减少)
返回值:若成功,brk()会返回0,否则返回-1。
brk函数
定义:可以改变brk指针内存储的地址(即堆结束地址,又叫堆顶),传参多少就把brk设置为多少
返回值:若成功,brk()会返回0,否则返回-1。

malloc

malloc一方面会检查malloc的参数在负数范围内不得大于-2*MINSIZE且top_size的值减去分配的chunk的size大小的值大于MINSIZE (MINSIZE是最小的chunk的size大小)
malloc接受数值会经过下列转化:
(((req) + SIZE_SZ + MALLOC_ALIGN_MASK < MINSIZE) ? MINSIZE: ((req) + SIZE_SZ + MALLOC_ALIGN_MASK) & ! MALLOC_ALIGN_MASK

一个三目运算符 a?b :c
reg为malloc传入的参数,SIZE_SZ和操作系统位数有关 32位为4,64位为8位。MALLOC_ALIGN_MASK也与操作系统位数有关,32位为7,64位为15.最后的值为size大小(不包括标志位)(除了malloc参数小于8和16,size大小一律为0x10和0x20)

free

1.不会清空此堆块的 user data
2.将此堆块的指针存储到 main_arena 中了
参数为空 啥都没做
参数对应chunk已经被释放,会出现乱七八糟的情况

free后

不存在M状态
user data头部分配出fd和bk,未free时候没有fd和bk存的是数据。free后会被添加到对应的freechunk管理表。fd为前一个已经free的chunk的地址,bk为后一个已经free的chunk的地址

fd_nextsize,bk_nextsize是较大的chunkfree后有的
fd_nextsize为前一个与当前chunk大小不同的freechunk地址
bk_nextsize为后一个与当前chunk大小不同的freechunk地址
一般空闲的较大的chunk按照从大到小的顺序排列

top chunk

在系统当前的所有 free chunk(无论那种 bin),都无法满足用户请求的内存大小的时候,就会从 top chunk 上”剪切”一部分作为 chunk 分配给他,top chunk的size减小

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

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

相关文章

实用篇-ES-RestClient查询文档

一、快速入门 上面的查询文档都是依赖kibana&#xff0c;在浏览器页面使用DSL语句去查询es&#xff0c;如何用java去查询es里面的文档(数据)呢 我们通过match_all查询来演示基本的API&#xff0c;注意下面演示的是 match_all查询&#xff0c;也叫基础查询 首先保证你已经做好了…

Linux_系统信息_uname查看内核版本、内核建立时间、处理器类型、顺便得到操作系统位数等

1、uname --help 使用uname --help查看uname命令的帮助信息 2、uname -a 通过上面的help就知道-a选项显示全部内容时的含义了。 内核名是Linux主机名是lubancat&#xff0c;如果想看主机名可以使用命令hostname&#xff1b;内核版本是Linux 4.19.232&#xff0c;建立时间为2…

解锁编程潜能:探索亚马逊CodeWhisperer,打造编程世界的声音引导者

文章目录 前言一、什么是 Amazon CodeWhisperer&#xff1f;二、如何使用CodeWhisperer&#xff1f;安装CodeWhisperer插件配置CodeWhisperer生成注释和文档 总结 前言 随着CHATGPT的一声巨响&#xff0c;大语言模型已经成为了一个备受瞩目的创新应用。亚马逊云科技作为全球领…

V10 桌面版、服务器版系统加固

V10 桌面版、服务器版系统加固 一、 文档说明 本文档中涉及的加固方法主要包括&#xff1a;密码策略配置、防火墙规 则配置、禁用高风险服务等。 二、 V10 桌面版系统加固 2.1 密码策略配置 密码策略包括密码老化控制策略和密码复杂度策略。密码老化 控制策略需要配置/etc…

Power Automate-当收到HTTP请求时触发流程

选择创建自动化云端流&#xff0c;点跳过 第一个操作搜索HTTP&#xff0c;点击当收到HTTP请求时 点击使用示例有效负载生成架构 写入JSON&#xff0c;点击完成 正文JSON架构就自动生成了&#xff0c;再点击左下角的显示高级选项 Method根据需求选择 可以选择JSON中的参数赋值给…

网络安全(黑客技术)—高效自学

前言 前几天发布了一篇 网络安全&#xff08;黑客&#xff09;自学 没想到收到了许多人的私信想要学习网安黑客技术&#xff01;却不知道从哪里开始学起&#xff01;怎么学 今天给大家分享一下&#xff0c;很多人上来就说想学习黑客&#xff0c;但是连方向都没搞清楚就开始学习…

【ARM Trace32(劳特巴赫) 使用介绍 2.1 -- TRACE32 Practice 脚本 cmm 脚本学习】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 上篇文章【ARM Trace32(劳特巴赫) 使用介绍 2 - Veloce 环境中使用trace32 连接 Cortex-M33】 下篇文章【ARM Trace32(劳特巴赫) 使用介绍 2.2 – TRACE32 进阶命令之 DIAG 弹框命令】 文章目录 1. TRACE32 Practice 语法1.…

【转载】快速搭建OpenGL环境!!!Windows10 + Visual Studio 2019 搭建OpenGL环境

目录 具体链接&#xff1a; 【转自】 完成后效果如下&#xff1a; 一开始的爆红&#xff1a; 下载安装后&#xff1a; 运行成功&#xff1a; 具体链接&#xff1a; 萌新向&#xff01;&#xff01;&#xff01;Windows10 Visual Studio 2019 搭建OpenGL环境&#xff08;…

StringBuffer和StringBuilder的区别与联系

文章目录 区别一览StringBuffer如何实现多线程同步关键字&#xff08;Synchronized&#xff09;性能考虑使用场景 当不使用多线程的情况下&#xff0c;是否StringBuffer和StringBuilder的性能一样&#xff1f;性能差异原因实践中的选择结论 区别一览 StringBuffer 和 StringBu…

实际使用Elasticdump工具对Elasticsearch集群进行数据备份和数据还原

文/朱季谦 目录一、Elasticdump工具介绍二、Elasticdump工具安装三、Elasticdump工具使用 最近在开发当中做了一些涉及到Elasticsearch映射结构及数据导出导入的工作&#xff0c;怕以后会把这过程忘记&#xff0c;可谓好记性不如烂笔头&#xff0c;故而记录成一篇博文。 玩El…

Jenkinsfile+Dockerfile前端vue自动化部署

前言 本篇主要介绍如何自动化部署前端vue项目 其中&#xff0c;有两种方案&#xff1a; 第一种是利用nginx进行静态资源转发&#xff1b;第二种方案是利用nodejs进行启动访问&#xff1b; 各个组件版本如下&#xff1a; Docker 最新版本&#xff1b;Jenkins 2.387.3nginx …

【项目】云备份系统基础功能实现

目录 一.项目介绍1.云备份认识2.服务端程序负责功能与功能模块划分3.客户端程序负责功能与功能模块划分4.开发环境 二.环境搭建1.gcc升级7.3版本2.安装jsoncpp库3.下载bundle数据压缩库4.下载httplib库 三.第三方库认识1.json(1)json认识(2)jsoncpp认识(3)json实现序列化(4)jso…

解决公网下,k8s calico master节点无法访问node节点创建的pod

目的&#xff1a;解决pod部署成功后&#xff0c;只能在node节点访问&#xff0c;而master节点无法访问 原因&#xff1a;集群搭建时&#xff0c;没有配置公网进行kubectl操作&#xff0c;从而导致系统默认node节点&#xff0c;使用内网IP加入k8s集群&#xff01;如下&#xff…

短视频ai剪辑分发账号矩阵系统(招商oem)----源头技术开发

短视频ai剪辑分发账号矩阵系统 1. 视频剪辑工具——原创短视频一键生成&#xff0c;视频剪辑亮点分析 &#xff08;1&#xff09;多模式智能剪辑 包含智能混剪逻辑、智能组合、场景顺序、图片生成视频等多种模式。在视频创作上也做了简化&#xff0c;即使是没有剪辑能力的创…

多维时序 | MATLAB实现PSO-GRU-Attention粒子群优化门控循环单元融合注意力机制的多变量时间序列预测

多维时序 | MATLAB实现PSO-GRU-Attention粒子群优化门控循环单元融合注意力机制的多变量时间序列预测 目录 多维时序 | MATLAB实现PSO-GRU-Attention粒子群优化门控循环单元融合注意力机制的多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MAT…

32位单片机PY32F040,主频72M,外设丰富,支持断码LCD

PY32F040 系列微控制器采用高性能的 32 位 ARM Cortex-M0 内核,宽电压工作范围的 MCU。嵌入高达 128 Kbytes flash 和 16 Kbytes SRAM 存储器,最高工作频率 72 MHz。LQFP64封装两块出头就可以拿到&#xff0c;我们还有开发板和开发资料帮助客户更好的开发。 PY32F040 系列微控…

Ps:锁定图层

使用“图层”面板上的锁定图层 Lock Layer功能可以完全或部分锁定图层以保护其内容。 比如&#xff0c;在完成某个图层后希望它不再被修改&#xff08;包括不透明度和图层样式等&#xff09;&#xff0c;可将其完全锁定。 如果不想更改图像&#xff0c;但对其摆放位置还在犹豫不…

CTFhub-RCE-过滤空格

1. 查看当前目录&#xff1a;127.0.0.1|ls 2. 查看 flag_890277429145.php 127.0.0.1|cat flag_890277429145.php 根据题目可以知道空格被过滤掉了 3.空格可以用以下字符代替&#xff1a; < 、>、<>、%20(space)、%09(tab)、$IFS$9、 ${IFS}、$IFS等 $IFS在li…

家庭网络中的组网方式

家庭网络中&#xff0c;目前也衍生出了比较多的组网方式&#xff0c;也不是只有Easymesh&#xff0c;我们还是要辩证的去看&#xff0c;没有绝对的好和坏&#xff0c;需求不同&#xff0c;取舍不同。 这里博主简单的介绍几种组网方式&#xff0c;上图也比较直观 1.wds wds是…

大数据分析与应用实验任务八

大数据分析与应用实验任务八 实验目的 进一步熟悉pyspark程序运行方式&#xff1b;熟练掌握pysaprk RDD基本操作相关的方法、函数。 实验任务 进入pyspark实验环境&#xff0c;在图形界面的pyspark命令行窗口中完成下列任务&#xff1a; 在实验环境中自行选择路径新建以自…