吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 10733|回复: 18
收起左侧

[调试逆向] 使用windbg查看进程堆信息

  [复制链接]
buzhifou01 发表于 2019-12-23 21:27
本帖最后由 buzhifou01 于 2019-12-23 21:35 编辑

1.前言
使用windbg查看进程堆中的信息,可以帮助技术人员判断系统是否发生堆溢出,进程中的堆大体上分为两种:NT堆和段堆。在NT堆和段堆中都含有低碎片化堆,接下来讲解查看NT堆和段堆信息的命令及使用。
2.堆命令
[Asm] 纯文本查看 复制代码
!heap [HeapOptions] [ValidationOptions] [Heap] 
!heap -b [{alloc|realloc|free} [Tag]] [Heap | BreakAddress] 
!heap -B {alloc|realloc|free} [Heap | BreakAddress] 
!heap -l 
!heap -s [SummaryOptions] [StatHeapAddress] 
!heap -i HeapAddress
!heap -x [-v] Address 
!heap -p [PageHeapOptions] 
!heap -srch [Size] Pattern
!heap -flt FilterOptions
!heap -stat [-h Handle [-grp GroupBy [MaxDisplay]]]
!heap [-p] -?
!heap -triage [Handle | Address] 

3.详解命令
3.1NT堆和段堆共有命令
[Asm] 纯文本查看 复制代码
!heap -s [SummaryOptions] [StatHeapAddress] 

该命令可以显示某个堆的所有信息。 如果省略了SummaryOptions和StatHeapAddress,那么将显示与当前进程关联的所有堆的全部信息。
[SummaryOptions] 命令如下:
命令              介绍                             
-v验证所有块的信息(发现有没有块已损坏)
-b   指定bucket大小(低碎片堆中的bucket),默认是1024bit
-d 指定bucket大小(低碎片堆中的bucket)
-a转储所有堆块
-c指定每个块应该分配的内容
[Asm] 纯文本查看 复制代码
!heap -triage [Handle | Address]

使windbg自动搜索进程堆中的故障。 如果将堆句柄指定为参数,则会检查该堆, 否则,将在所有堆中搜索包含给定地址的堆,并对这些堆进行检查。 使用-triage是验证低碎片堆(LFH)损坏的唯一方法。
[Asm] 纯文本查看 复制代码
!heap -x [-v] Address 

使windbg搜索包含指定地址的堆块。 如果添加了-v,该命令将在当前进程的整个虚拟内存空间中搜索指向此堆块的指针。
[Asm] 纯文本查看 复制代码
!heap -l

使windbg检测泄漏的堆块。
[Asm] 纯文本查看 复制代码
!heap -i HeapAddress

显示有关指定堆的信息。
[Asm] 纯文本查看 复制代码
!heap [-p] -?

在“调试器命令”窗口中显示此扩展名的简短帮助文本。 使用!heap-? 寻求一般帮助,以及!heap -p-? 获取页面堆帮助。
3.2NT 堆命令
接下来列出的命令只能用在NT堆中
[Asm] 纯文本查看 复制代码
!heap [HeapOptions] [ValidationOptions] 

[HeapOptions] 处的命令如下:
命令                                          介绍                                    
-v 验证指定的堆(验证堆有没有损坏,不能验证低碎片化堆)
-a 显示指定堆中的所有信息
-h 显示指定堆的所有非LFH项信息
-hl 显示指定堆的所有项信息,包括LFH。
-f 显示指定堆中空闲内存项信息。
-m 显示指定堆的所有段信息。
-t 显示指定堆的标签信息。
-T 显示指定堆的伪标记信息。
-g显示全局标签信息。全局标记与每个未标记的分配相关联。
-s显示指定堆的统计信息。
-k显示与每个项关联的堆栈回溯。
[ValidationOptions]  处的命令如下:
命令                         介绍                     
-D 禁用指定堆的调用验证。
-E 为指定的堆启用验证。
-d 禁用对指定堆的堆检查。
-e 对指定的堆启用堆检查。

3.3其他堆指令
3.3.1中断命令
[Asm] 纯文本查看 复制代码
!heap -b [{alloc|realloc|free} [Tag]] [ BreakAddress] 

使windbg在堆中创建条件断点。 -b选项后可以是alloc,realloc或free; 它指定是通过分配,重新分配还是释放内存来激活断点。 如果使用BreakAddress指定块的地址,则可以省略断点类型。 如果使用堆来指定堆地址或堆索引,则必须包括类型以及Tag参数。
[Asm] 纯文本查看 复制代码
!heap -B {alloc|realloc|free} [BreakAddress] 

使windbg从堆中删除条件断点。 必须指定断点类型(分配,重新分配或空闲),并且必须与-b选项使用的断点类型相同。
3.3.2页堆命令
[Asm] 纯文本查看 复制代码
!heap -p [PageHeapOptions] 

显示指定页面堆信息。 如果不使用PageHeapOptions,则将显示所有页面堆。
[PageHeapOptions]命令如下:
命令                                         介绍
-h 使windbg显示有关带有句柄的页面堆的详细信息。
-a 使windbg找到指定地址块中的页面堆。详细显示指定地址块与全页堆块相关的全部信息
-t[c|s] 使windbg显示重堆信息
-fi 使windbg显示最新的错误信息
-all 使windbg显示有关所有页面堆的信息
-? 使windbg显示页面堆帮助,包括堆块图
3.3.3过滤,搜索,统计命令
[Asm] 纯文本查看 复制代码
!heap -srch [Size] Pattern

扫描给定Pattern中所有堆
[Size]命令如下:
命令                  介绍           
-b Pattern为一字节大小
-w  Pattern为一字大小
-d  Pattern为一双字大小
-q  Pattern为一四字大小

[Asm] 纯文本查看 复制代码
!heap -flt FilterOptions

显示指定大小或范围大小的堆。
[FilterOptions]命令如下:
     命令               介绍               
s 显示指定大小的堆
r 显示指定范围大小的堆
[Asm] 纯文本查看 复制代码
!heap -stat [-h Handle [-grp GroupBy [MaxDisplay]]]

显示指定堆的统计信息
-h  Handle
显示Handle处堆的使用情况。 如果Handle为0或省略,则显示所有堆的使用情况。
-grp GroupBy
GroupBy处的命令如下
命令          介绍               
A 根据分配大小显示使用情况统计信息
B 根据块的数量显示使用情况统计信息
S 根据每个分配的总大小显示使用情况统计信息
[MaxDisplay]
限制输出行数。
4.命令使用
1.用!heap -h显示进程中所有堆的项(不含低碎片化堆)信息。显示 Unable to read _HEAP_SEGMENT structure at 0000000000000000的堆是段堆
2345截图20191223205452.png

2.用!heap -s 显示某个堆的统计信息
2345截图20191223205630.png
3.!heap -x -v显示某个堆中所有块的信息
2345截图20191223210141.png
4.!heap -stat -h显示指定堆的统计信息
2345截图20191223210703.png
5.!heap -flt r 0x50 0x80 显示大小介于0x50和0x80之间的页堆
2345截图20191223211701.png
6.!heap -p -a输出页堆信息
2345截图20191223212318.png















免费评分

参与人数 6吾爱币 +8 热心值 +5 收起 理由
monsterbaby521 + 1 + 1 谢谢@Thanks!
mercymodest + 1 谢谢@Thanks!
pokemon49 + 1 我很赞同!
清炒藕片丶 + 1 + 1 热心回复!
Hmily + 5 + 1 鼓励转贴优秀软件安全工具和文档!
suy + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

flexlm 发表于 2020-2-12 11:53
谢谢分享好用的资料
hetaon 发表于 2019-12-23 21:38
专业,我只用这个看过蓝屏 DUMP文件,学习了~~~
Devil太初 发表于 2019-12-23 22:54
chenyadi 发表于 2019-12-24 10:24
高手呀?我看不是很懂
a1327831029 发表于 2019-12-24 12:42
学习了  谢 谢分享
2Burhero 发表于 2019-12-24 15:23
厉害厉害
abs9668 发表于 2019-12-24 19:55
感谢分享
清炒藕片丶 发表于 2019-12-25 16:36
学习了,这个使用实用。
gaosld 发表于 2019-12-25 17:15
谢谢分享好用的资料
chenjingyes 发表于 2019-12-26 10:36
收藏·了·,以后备用 哈哈哈
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-3 23:15

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表