Libheap是一个用于在Linux平台上分析glibc堆结构的GDB调试脚本,使用Python语言编写。
       

  安装
  Glibc安装
  尽管Libheap不要求glibc使用GDB调试支持和符号进行编译,但是如果用户使用的话,也不会影响它的功能。已经有很多手动构建Glibc的指导说明,目前最合适的一个:
  Devpit – Building GLIBC
  Fedora上使用了以下简单的方法实现了该方法:
  debuginfo-install glibc
  使用该命令,系统会自动安装并设置调试Glibc。
  GDB安装
  如果用户使用的是较新版本的Fedora,其中的GDB使用加入了最新的python支持的新技术。否则,用户就需要从SVN中构建GDB,而不是使用Tom Tromey提供的步骤:
       

  这一步完成后,用户就会得到一个可以在archer/install/bin/gdb上运行的编译版本GDB。
  Libheap安装
  最后一步是安装Libheap库,这一步相对简单,只需要将其移动到Python路径(sys.path)下:
  $ mv libheap.py /usr/lib/python2.6
  用法
  加载libheap同加载其他Python库的方法类似:
       

  整体堆状态
  多个不同的状态用于输出堆的整体状态,如下:
  heap -h
       

  heap
      

  heap -b
      

  heap -f
      

  heap -f
      

  heap -s
     

  heap -l
      

  heap -c
     

  数据块
  libheap为用户提供了多种方法用于检查内存分配数据块。该库使用一个比较完善的malloc_chunk结构体输出程序,因此只要是有效的数据库,就可以输出其地址:
      

  为了获取数据库的更加细粒度的访问权限,libheap使用了一个代表内存分配数据块的python类:
      

  默认情况下,程序会将一个地址看作已释放的数据库,并读取malloc_chunk结构体的所有字段。但是如果用户传递一个名为‘inuse’的可选布尔项就可以改变这种情况。如果用户只是想要读取已分配数据块的头部,那么可以传入一个名为‘read_data’的可选布尔项。该类默认读取数据块中指定的任意大小的内存,这样显示是有弊端的:攻击者可以使用虚假的值覆盖size字段。因此程序设置了一个可选的size标志,用户可以指定真实的数据块大小。综上所述,用户可以访问和更改数据块中独立的字段:
     

  最后,如果用户想要查看内存分配数据块在堆实现中的表现形式,可以向该类传递一个行内存字符串,并查看解析情况:

       

  Glibc结构体
  libheap中还包含malloc_par和malloc_state结构体的输出程序。用户可以通过请求输出全局变量查看:
       

  以下为这两个重要结构体的Python类实现,用户可以使用这些类查看任意内存:
      

  便捷函数
  如果用户想要扩展该库或使用其中的任意功能,以下为在Python中重新实现的Glibc函数列表:
       

上一页    

Libheap:一款用于分析Glibc堆结构的GDB调试工具的更多相关文章

  1. Glibc堆块的向前向后合并与unlink原理机制探究

    i春秋作家:Bug制造机 原文来自:Glibc堆块的向前向后合并与unlink原理机制探究 玩pwn有一段时间了,最近有点生疏了,调起来都不顺手了,所以读读malloc源码回炉一点一点总结反思下. U ...

  2. 【pwn】学pwn日记(堆结构学习)

    [pwn]学pwn日记(堆结构学习) 1.什么是堆? 堆是下图中绿色的部分,而它上面的橙色部分则是堆管理器 我们都知道栈的从高内存向低内存扩展的,而堆是相反的,它是由低内存向高内存扩展的 堆管理器的作 ...

  3. 堆结构的优秀实现类----PriorityQueue优先队列

    之前的文章中,我们有介绍过动态数组ArrayList,双向队列LinkedList,键值对集合HashMap,树集TreeMap.他们都各自有各自的优点,ArrayList动态扩容,数组实现查询非常快 ...

  4. FFmpeg源代码简单分析:常见结构体的初始化和销毁(AVFormatContext,AVFrame等)

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  5. ffplay源码分析2-数据结构

    ffplay是FFmpeg工程自带的简单播放器,使用FFmpeg提供的解码器和SDL库进行视频播放.本文基于FFmpeg工程4.1版本进行分析,其中ffplay源码清单如下: https://gith ...

  6. [转载] FFmpeg源代码简单分析:常见结构体的初始化和销毁(AVFormatContext,AVFrame等)

    ===================================================== FFmpeg的库函数源代码分析文章列表: [架构图] FFmpeg源代码结构图 - 解码 F ...

  7. MAT工具定位分析Java堆内存泄漏问题方法

    一.MAT概述与安装 MAT,全称Memory Analysis Tools,是一款分析Java堆内存的工具,可以快速定位到堆内泄漏问题.该工具提供了两种使用方式,一种是插件版,可以安装到Eclips ...

  8. Java内存分析--栈--堆

    Java内存分析--栈--堆 JVM的内存分析: 1.栈内存 1.连续的存储空间,遵循后进先出的原则. 2.每个线程包含一个栈区,栈区只保存基础数据类型的对象和自定义对象的引用. 3.每个栈中的数据都 ...

  9. GC root & 使用MAT分析java堆

    当我们的java程序遇到频繁full gc或者oom的时候,我们常常需要将当前的heap dump出来进行进一步的分析.MAT是用于分析heap dump的神器. 1 生成heap dump heap ...

随机推荐

  1. Python批量文件重命名

    今天,得到一个里面都是图片的文件夹,但是图片都没有后缀,因此想用Pythton批量地为所有的文件加上".jpg"的后缀,代码如下: #-*- coding:utf-8 -*- #重 ...

  2. UVA10759_Dice Throwing

    求掷骰子n次,点数之和超过m的概率有多大?分数表示. 两种方法: 1.直接DP.用两个数组分别表示分子和分母,注意计算过程中时时约分. 2.将(x1+x2+x3+x4+x5+x6)n多项式展开,把大于 ...

  3. jenkins自动部署windwos服务器

    jenkins 持续构建windows 项目 需求说明 公司新购windwos服务器,并配置了堡垒机,由于经常要提交代码进行更新,导致手动部署很是麻烦,故采用公司jenkins实行持续构建 jenki ...

  4. 罗辑思维CEO脱不花:关于工作和成长,这是我的121条具体建议

    1 关于面对批评 01. 没有人对被批评感到高兴.如果有,TA撒谎. 02. 面对批评,得体的第一反应是“不急于解释,不反唇相讥”. 03. 每天,或者最长每周养成习惯,把自己存在的问题和造成的麻烦用 ...

  5. Python - 静态函数(staticmethod), 类函数(classmethod), 成员函数 区别(完全解析)

    原文地址:http://blog.csdn.net/caroline_wendy/article/details/23383995 还有一篇:http://blog.csdn.net/carolzha ...

  6. SHA1WithRSA签名 规范化标准签名

    #region CerRsaSignature 根据私钥签名 /// <summary> /// 根据私钥串签名 /// </summary> /// <param na ...

  7. 【bzoj3573】 Hnoi2014—米特运输

    http://www.lydsy.com/JudgeOnline/problem.php?id=3573 (题目链接) 题意 题意是这道题最大的难点→_→ Solution 沙茶树形dp,考虑一定会存 ...

  8. kibana5画图

    先展示一下我的Dashboard 1.Markdown文本 2.日志条数统计 3.访问IP前10柱状图 4.访问IP前10饼图 5.状态码饼图 6.状态码趋势图 7.状态码柱状叠加图 8.流量趋势图 ...

  9. WEB入门.七 CSS布局模型

    学习内容 标准文档流 流动模型(flow model) 浮动模型(float model) CSS基本布局 能力目标 理解标准文档流 使用流动模型实现页面布局 使用浮动模型实现页面布局 掌握常用CSS ...

  10. shiro权限认证与授权

    什么是shiro? Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权.加密.会话管理等功能,组成了一个通用的安全认证框架. 为什么要用sh ...