计算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字节的块?在
很好,我需要调用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])
- 项目
标签: