计算malloc和bin的glibc malloc块大小

gmcalc的Python项目详细描述


GMCalc公司

gmcalc是一个glibc malloc计算器,它允许找到 malloc大小,块大小和垃圾箱。在

它可以回答如下问题:

  • 释放使用malloc(78)创建的块后,可以使用哪些容器?在
$ gmcalc s2b -m 78
chunk: 0x60 bins: fastbin[5] small[5](bins[6])

好的,我将用我最喜欢的调试器来查看fastbin5。在

  • 我需要用malloc分配多少字节才能创建0x80字节的块?在
^{pr2}$

很好,我需要调用malloc(105)来创建一个0x80字节的块。普恩来了。。。;)

安装

来自pypi:

pip3 install gmcalc

从回购:

git clone ...
cd gmcalc/
pip install .

使用

环境参数

glibc库和对齐因glibc版本、程序的功能而异 架构和位,因此可以指定以下参数 在所需的环境中执行计算。在

在每个命令中,可以指定:

  • -b/--bits->;程序位:32或64。在
  • -g/--glibc->;glibc2次要版本。在
  • -n/--no-x86->;如果体系结构是x86或其他体系结构。在

程序的位决定了最小块大小(因为大小 (属于size_t类型),这也会影响容器及其大小范围。在

此外,自从glibc版本2.26以来,x86程序中的块 体系结构总是与16字节对齐,而不考虑位。由于 如果考虑到x86体系结构,则将其考虑在内。在

Malloc到Chunk

命令m2c(malloc to chunk)允许计算 为给定大小的malloc分配的块。在

计算malloc(0)(64位)的块大小:

$ gmcalc m2c 0
malloc: 0 0x0 chunk: 32 0x20

以32位计算malloc(16)的块大小:

$ gmcalc m2c -b 32 16
malloc: 16 0x10 chunk: 24 0x18

块到Malloc

命令c2m(chunk to malloc)指示您可以使用的大小范围 传递给malloc以生成给定大小的块。在

计算块大小为0x20字节(64位)的malloc范围:

$ gmcalc c2m 0x20
chunk: 32 0x20 malloc: 0-24 0x0-0x18

计算32位0x20字节块大小的malloc范围:

$ gmcalc c2m -b 32 0x20
chunk: 32 0x20 malloc: 21-28 0x15-0x1c

料仓尺寸

命令b2s(Bin to Size)指示可以找到的块大小 在指定的箱子里。在

fastbin 5的尺寸:

$ gmcalc b2s f5
bin: fast[5] chunk: 0x60 malloc: 0x49-0x58

指定bin的方法是使用前缀和索引,方法如下:

  • <prefix><index>->;small1
  • <prefix>[<index>]->;small[1]
  • <prefix>:<index>->;small:1

有一种特殊情况,未排序的bin,它不需要索引。在

前缀如下:

  • 小->s,小。E、 g:small1,s1。在
  • 大箱子->;l,大。E、 g:l1,大号1。在
  • 未排序的纸盒->;u,未排序。E、 g:u,未分类。在
  • 双箱(malloc\u state的属性箱)—>;b,bin,bins。E、 g:b1、bin1、bin1。在
  • 快速储物箱->;f,快速。E、 g:f1,快速1。在
  • t缓存->t;t缓存。E、 g:t1,tcache1。在

大小到箱子

命令s2b(Size to Bin)指示给定的 大小可以插入。任何区块范围都可以插入未排序的bin中,因此 未显示。在

注意:Tcache bin仅在glibc版本为2.26或更高版本时显示。在

0x60字节块的存储箱(glibc 19):

$ gmcalc s2b 0x60
chunk: 0x60 bins: fastbin[5] small[5](bins[6])

glibc 26中0x60块的存储箱:

$ gmcalc s2b 0x60 -g 26
chunk: 0x60 bins: tcache[5] fastbin[5] small[5](bins[6])

使用malloc(1337)分配的块的存储箱:

$ gmcalc s2b 1337 -m 
chunk: 0x550 bins: large[5](bins[69])

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何向第二个组合框模型项添加数组值从第一个组合框所选项获取数组名称?   使用Java与WebSphere的SSL握手错误   eclipse线程“main”Java中的第一个Java程序异常。lang.NoClassDefFoundError   java将Javafx应用作为Web应用移植的最佳方式   IDE的java右JVM文件夹   java如何在基本适配器中停止文本到语音   java If block使用substring和equals方法以假值执行   在本例中,如何在java中返回多个值?   java第二个主类在maven构建期间覆盖第一个主类   如何在java中设置运行时ArrayList的泛型类型?   java从主机读取文件