Libheap:一款用于分析Glibc堆结构的GDB调试工具

摘要:
Libheap是一个用于在Linux平台上分析glibc堆结构的GDB调试脚本,使用Python语言编写。安装Glibc安装尽管Libheap不要求glibc使用GDB调试支持和符号进行编译,但是如果用户使用的话,也不会影响它的功能。已经有很多手动构建Glibc的指导说明,目前最合适的一个:Devpit–BuildingGLIBCFedora上使用了以下简单的方法实现了该方法:debuginfo-installglibc使用该命令,系统会自动安装并设置调试Glibc。

Libheap是一个用于在Linux平台上分析glibc堆结构的GDB调试脚本,使用Python语言编写。
Libheap:一款用于分析Glibc堆结构的GDB调试工具第1张
安装
Glibc安装
尽管Libheap不要求glibc使用GDB调试支持和符号进行编译,但是如果用户使用的话,也不会影响它的功能。已经有很多手动构建Glibc的指导说明,目前最合适的一个:
Devpit – Building GLIBC
Fedora上使用了以下简单的方法实现了该方法:
debuginfo-install glibc
使用该命令,系统会自动安装并设置调试Glibc。
GDB安装
如果用户使用的是较新版本的Fedora,其中的GDB使用加入了最新的python支持的新技术。否则,用户就需要从SVN中构建GDB,而不是使用Tom Tromey提供的步骤:
Libheap:一款用于分析Glibc堆结构的GDB调试工具第2张
这一步完成后,用户就会得到一个可以在archer/install/bin/gdb上运行的编译版本GDB。
Libheap安装
最后一步是安装Libheap库,这一步相对简单,只需要将其移动到Python路径(sys.path)下:
$ mv libheap.py /usr/lib/python2.6
用法
加载libheap同加载其他Python库的方法类似:
Libheap:一款用于分析Glibc堆结构的GDB调试工具第3张
整体堆状态
多个不同的状态用于输出堆的整体状态,如下:
heap -h
Libheap:一款用于分析Glibc堆结构的GDB调试工具第4张
heap
Libheap:一款用于分析Glibc堆结构的GDB调试工具第5张
heap -b
Libheap:一款用于分析Glibc堆结构的GDB调试工具第6张
heap -f
Libheap:一款用于分析Glibc堆结构的GDB调试工具第7张
heap -f
Libheap:一款用于分析Glibc堆结构的GDB调试工具第8张
heap -s
Libheap:一款用于分析Glibc堆结构的GDB调试工具第9张
heap -l
Libheap:一款用于分析Glibc堆结构的GDB调试工具第10张
heap -c
Libheap:一款用于分析Glibc堆结构的GDB调试工具第11张
数据块
libheap为用户提供了多种方法用于检查内存分配数据块。该库使用一个比较完善的malloc_chunk结构体输出程序,因此只要是有效的数据库,就可以输出其地址:
Libheap:一款用于分析Glibc堆结构的GDB调试工具第12张
为了获取数据库的更加细粒度的访问权限,libheap使用了一个代表内存分配数据块的python类:
Libheap:一款用于分析Glibc堆结构的GDB调试工具第13张
默认情况下,程序会将一个地址看作已释放的数据库,并读取malloc_chunk结构体的所有字段。但是如果用户传递一个名为‘inuse’的可选布尔项就可以改变这种情况。如果用户只是想要读取已分配数据块的头部,那么可以传入一个名为‘read_data’的可选布尔项。该类默认读取数据块中指定的任意大小的内存,这样显示是有弊端的:攻击者可以使用虚假的值覆盖size字段。因此程序设置了一个可选的size标志,用户可以指定真实的数据块大小。综上所述,用户可以访问和更改数据块中独立的字段:
Libheap:一款用于分析Glibc堆结构的GDB调试工具第14张
最后,如果用户想要查看内存分配数据块在堆实现中的表现形式,可以向该类传递一个行内存字符串,并查看解析情况:


Libheap:一款用于分析Glibc堆结构的GDB调试工具第15张
Glibc结构体
libheap中还包含malloc_par和malloc_state结构体的输出程序。用户可以通过请求输出全局变量查看:
Libheap:一款用于分析Glibc堆结构的GDB调试工具第16张
以下为这两个重要结构体的Python类实现,用户可以使用这些类查看任意内存:
Libheap:一款用于分析Glibc堆结构的GDB调试工具第17张
便捷函数
如果用户想要扩展该库或使用其中的任意功能,以下为在Python中重新实现的Glibc函数列表:
Libheap:一款用于分析Glibc堆结构的GDB调试工具第18张 上一页

免责声明:文章转载自《Libheap:一款用于分析Glibc堆结构的GDB调试工具》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇MSSQL2008 R2 数据库展开报错:值不能为空 参数名:viewInfoMaven 引用本地jar包启动正常 运行时报错下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

第七部分(二) 动态渲染页面爬取(Splash的安装和使用、Scrapy的安装、Docker的安装、Scrapy-Splash的安装,在Windows及Linux平台的安装)

二、 Splash的使用Splash是一个JavaSscript渲染服务,一个带有HTTP API的轻量级浏览器,同时对接了Python中的Twisted和QT库。使用它同样可以实现动态渲页面的抓取。Splash可以实现下面的这些功能:异步方式处理多个网页渲染过程;获取渲染后的页面的源代码或截图;通过关闭图片渲染或者使用Adblock规则来加快页面渲染速度...

python数据处理中内存优化的一些tricks

1、读入数据时,pandas默认int类型为int64,未采用最省类型方式读取,可通过以下方式优化内存 1)数值型能用更低内存类型保存就转换为更低内存类型 2) 将object类型转换为category类型 category 类型在底层使用整型数值来表示该列的值,而不使用原值.Pandas用一个字典来构建这些整型数据到原数据的映射关系.当一列只包含有有限...

python多进程那点事儿【multiprocessing库】

      前言:项目中有个需求需要对产品的日志处理,按照产品中日志的某些字段,对日志进行再次划分。比如产品的日志中含有字段id,tag=1,现在需要把tag是基数的放到一个文件中,tag是偶数的放入一个文件中。这就涉及到多个文件的读写操作,一个文件一个文件读取写入那时间太久了,公司配备的单机,跑了半个多小时,光标还是一直在闪闪闪【你懂得】。没办法了,还是...

第一章--django--安装介绍

目录 初识 Django Django 安装方式 PIP 安装 Anaconda 安装 移除旧版本(直接删除目录下所有文件) 查看已安装的Django版本 创建工程 1. 终端命令: 2. PyCharm 工具创建 目录结构说明 启动Django服务 初识 Django Django 是一个由 Python 编写的一个开放源代码的 We...

修改pycharm中的flask项目名遇到的坑

曾修改过自己的项目名,并在settings中的解释器也更正过来了。然后执行pip list 报错: failed to create process. 解决方法如下: 到你的项目的venv目录下的Scripts文件夹下,有2个文件名pip3-script.py和pip-script.py,在第一行中更正你新项目名的解释器路径即可即可。 #!D:python...

python操作Redis方法速记

redis有5种数据结构,分别如下:5种数据结构python语言对5种数据结构的增删改查 全局函数 redis 连接 import redis pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(connectio...