12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
三国霸业 战车-珍宝-觉醒-攻城掠地SF-全新玩法 免费玩新区 攻城掠地私服 进入游戏
手游私服盒子 各类免费游戏 0.1折送海量资源 各类手游私服 进入游戏
皇家MU2 《奇迹 2:传奇》韩国网禅公司《奇迹》正统续作。 3D锁视角Mmrpg 暗黑3+传奇+流放之路+奇迹 进入游戏
查看: 190|回复: 0

使用windbg查看进程堆信息

[复制链接]

315

主题

315

帖子

640

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
640
发表于 2020-7-7 20:23:53 | 显示全部楼层 |阅读模式
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] 命令如下:[table][tr][td] 命令              [/td][td]介绍                             [/td][/tr][tr][td] -v[/td][td]验证所有块的信息(发现有没有块已损坏)[/td][/tr][tr][td] -b  [/td][td] 指定bucket大小(低碎片堆中的bucket),默认是1024bit[/td][/tr][tr][td]-d [/td][td] 指定bucket大小(低碎片堆中的bucket)[/td][/tr][tr][td] -a[/td][td]转储所有堆块 [/td][/tr][tr][td] -c[/td][td]指定每个块应该分配的内容 [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] 处的命令如下:
[table][tr][td] 命令            [/td][td]                              介绍                                    [/td][/tr][tr][td] -v [/td][td] 验证指定的堆(验证堆有没有损坏,不能验证低碎片化堆)[/td][/tr][tr][td] -a[/td][td] 显示指定堆中的所有信息[/td][/tr][tr][td] -h[/td][td] 显示指定堆的所有非LFH项信息[/td][/tr][tr][td] -hl[/td][td] 显示指定堆的所有项信息,包括LFH。[/td][/tr][tr][td] -f[/td][td] 显示指定堆中空闲内存项信息。[/td][/tr][tr][td]-m [/td][td] 显示指定堆的所有段信息。[/td][/tr][tr][td] -t[/td][td] 显示指定堆的标签信息。[/td][/tr][tr][td] -T[/td][td] 显示指定堆的伪标记信息。[/td][/tr][tr][td] -g[/td][td]显示全局标签信息。全局标记与每个未标记的分配相关联。[/td][/tr][tr][td] -s[/td][td]显示指定堆的统计信息。[/td][/tr][tr][td] -k[/td][td]显示与每个项关联的堆栈回溯。 [ValidationOptions]  处的命令如下:
[table][tr][td] 命令   [/td][td]                      介绍                      [/td][/tr][tr][td]-D [/td][td] 禁用指定堆的调用验证。[/td][/tr][tr][td] -E[/td][td] 为指定的堆启用验证。[/td][/tr][tr][td] -d[/td][td] 禁用对指定堆的堆检查。[/td][/tr][tr][td] -e[/td][td] 对指定的堆启用堆检查。
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]命令如下:
[table][tr][td] 命令         [/td][td]                                介绍 [/td][/tr][tr][td] -h[/td][td] 使windbg显示有关带有句柄的页面堆的详细信息。[/td][/tr][tr][td] -a [/td][td] 使windbg找到指定地址块中的页面堆。详细显示指定地址块与全页堆块相关的全部信息[/td][/tr][tr][td] -t[c|s][/td][td] 使windbg显示重堆信息[/td][/tr][tr][td] -fi[/td][td] 使windbg显示最新的错误信息[/td][/tr][tr][td] -all[/td][td] 使windbg显示有关所有页面堆的信息[/td][/tr][tr][td] -?[/td][td] 使windbg显示页面堆帮助,包括堆块图3.3.3过滤,搜索,统计命令
[Asm] 纯文本查看 复制代码!heap -srch [Size] Pattern
扫描给定Pattern中所有堆
[Size]命令如下:
[table][tr][td] 命令         [/td][td]         介绍           [/td][/tr][tr][td] -b[/td][td] Pattern为一字节大小[/td][/tr][tr][td] -w[/td][td]  Pattern为一字大小[/td][/tr][tr][td] -d[/td][td]  Pattern为一双字大小[/td][/tr][tr][td]-q[/td][td]  Pattern为一四字大小
[Asm] 纯文本查看 复制代码!heap -flt FilterOptions
显示指定大小或范围大小的堆。
[FilterOptions]命令如下:
[table][tr][td]     命令 [/td][td]              介绍               [/td][/tr][tr][td] s[/td][td] 显示指定大小的堆[/td][/tr][tr][td] r[/td][td] 显示指定范围大小的堆[Asm] 纯文本查看 复制代码!heap -stat [-h Handle [-grp GroupBy [MaxDisplay]]]
显示指定堆的统计信息
-h  Handle
显示Handle处堆的使用情况。 如果Handle为0或省略,则显示所有堆的使用情况。
-grp GroupBy
GroupBy处的命令如下
[table][tr][td]命令     [/td][td]     介绍               [/td][/tr][tr][td] A[/td][td] 根据分配大小显示使用情况统计信息[/td][/tr][tr][td] B[/td][td] 根据块的数量显示使用情况统计信息[/td][/tr][tr][td] S[/td][td] 根据每个分配的总大小显示使用情况统计信息[MaxDisplay]
限制输出行数。
4.命令使用
1.用!heap -h显示进程中所有堆的项(不含低碎片化堆)信息。显示 Unable to read _HEAP_SEGMENT structure at 0000000000000000的堆是段堆


2.用!heap -s 显示某个堆的统计信息

3.!heap -x -v显示某个堆中所有块的信息

4.!heap -stat -h显示指定堆的统计信息

5.!heap -flt r 0x50 0x80 显示大小介于0x50和0x80之间的页堆

6.!heap -p -a输出页堆信息

















来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|12558网页游戏私服论坛 |网站地图

GMT+8, 2024-11-26 19:38 , Processed in 0.078125 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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