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. SpringBoot(五)_表单验证

    SpringBoot(五)_表单验证 参数校验在我们日常开发中非常常见,最基本的校验有判断属性是否为空.长度是否符合要求等,在传统的开发模式中需要写一堆的 if else 来处理这些逻辑,很繁琐,效率 ...

  2. iOS 数据库sqlite完整增删改查操作

    1: 创建数据库表格 1.1 — 表格创建使用一个数据库软件快速创建:软件大小14.3M; 下载地址:http://pan.baidu.com/s/1qWOgGoc; 表格创建-> 打开软件,点 ...

  3. 简明Python教程自学笔记——命令行通讯录

    [前言]学习Python已经有一段时间了,相关的书籍资料也下载了不少,但是没有一本完整的看完,也没有编出一个完整的程序.今天下午比较清闲就把<简明Python教程>看了一遍,然后根据书里面 ...

  4. 20165218 《网络对抗技术》Exp2 后门原理与实践

    Exp2 后门原理与实践 准备工作 1. 查看Linux和Win的IP地址,ping通 Linux地址 Win7地址 ping 2.下载ncat并装载到win7主机 3.下载socat并装载到win7 ...

  5. 响应式开发(二)-----Bootstrap框架的介绍

    简介 Bootstrap,来自 Twitter,是目前最受欢迎的前端框架,是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的, ...

  6. Android源码批量下载及导入到Eclipse

    1.去http://code.google.com/p/msysgit/downloads/list  下载Git,进行安装 2.生成批量下载脚本文件  下载批量工具CreatAutoGetSh(工具 ...

  7. 【贪心】【CF1061B】 Views Matter

    Description 给定一个只有一行的,由 \(n\) 组小正方体组成的方块,每组是由 \(a_i\) 块小正方体竖直堆叠起来的,求最多能抽掉多少块使得它的左视图和俯视图不变.方块不会掉落 Inp ...

  8. win8安装配置python2.7

    安装python 1.下载python安装包,下载网站https://www.python.org/downloads 2.解压文件,双击python-2.7.13.amd64.msi进行安装pyth ...

  9. python 文件路径问题

    需要用到 os 模块和 sys 模块 import os print(__file__)# 输出相对路径 print(os.path.abspath(__file__)) #输出绝对路径 # D:\P ...

  10. 使用nginx的ngx_upstream_jdomain模块实现k8s容器的负载均衡

    使用背景最近一直在准备k8s上线事宜,目前已经在测试环境中全面部署并通过压力测试环境检验.离正式上线基本只剩下时间问题.我们目前测试环境中的容器负载均衡大量使用到了nginx,就是借助了ngx_ups ...