学逆向论坛

找回密码
立即注册

只需一步,快速开始

发新帖

2万

积分

41

好友

1169

主题

[转载图文] Windgb 其他常用命令

发表于 2023-10-31 13:38:29 | 查看: 3844| 回复: 0
  • .lastevent
  显示最近发生的一个调试事件,往往是导致中断发生的那个。

Windgb 其他常用命令

Windgb 其他常用命令
  • .exr:
      此命令显示一个异常记录的详细内容,传入一个异常记录地址:

  • .exr 记录地址
  如果仅仅为了显示最近的一条异常记录,可以用-1代替异常记录地址:
  • .exr -1

  由于异常是事件的一种,所以使用.exr -1命令得到的异常,可能和使用.lastevent命令获取的事件,是同一个。但二者显示的信息各有侧重点。

Windgb 其他常用命令

Windgb 其他常用命令
  • .bugcheck
  此命令不带参数。在内核环境下,显示当前bug check的详细信息;可用于活动调试或者crash dump调试环境中。用户环境中,此命令不可用。
  • !analyze
  此命令分析当前最近的异常事件(如果在进行dump分析,则是bug check),并显示分析结果。这个异常事件,就是上面.lastevent命令对应的事件

    • -v:显示异常的详细信息,这个选项在调试错误的时候,最有用。
    • -f:f是force的缩写。强制将任何事件都当作异常来分析,即使仅仅是普通的断点事件。将因此多输出一些内容。
    • -hang:这个选项很有用,对于遇到死锁的情况,它会分析原因。在内核环境中,它分析内核锁和DPC栈;在用户环境中,它分析线程的调用栈。用户环境中,调试器只会对当前线程进行分析,所以一定要将线程环境切换到最可能引起问题的那个线程中去,才有帮助。这个参数非常有用,当真的遇到死锁时,它可以救命(另一个分析死锁的有效命令是!locks)。

Windgb 其他常用命令

Windgb 其他常用命令
  • !gle
  此命令是Get Last Error的缩写。它调用Win32接口函数GetLastError()取得线程的错误值,并打印分析结果。如果带有-all选项,则针对当前进程的所有线程执行GetLastError()操作;否则仅针对当前线程。
  • gh/gn
  这两个命令是g命令的扩展。
  • gh:是go with Exception handled的缩写,意思是:把异常标识为已处理并继续执行程序;gh的作用在于,当遇到某个可以忽略的非致命异常时,将它先跳过,继续执行程序。
  • gn:是go with Exception not handled的缩写,对异常不进行任何处理,而继续执行程序。这时候,程序自己的异常处理模块将有机会处理异


!name2ee
显示指定模块中指定类型或方法的MethodTable结构和EEClass结构。
指定模块必须被装入进程中。

Windgb 其他常用命令

Windgb 其他常用命令
!dumpmt –md address 查看指定地址的方法表和一个类的方法集

Windgb 其他常用命令

Windgb 其他常用命令
!dumpmd address  显示指定地址的MethodDesc结构信息
显示某地址的对象的信息, 包括fields, EEClass, Method Table和object size

Windgb 其他常用命令

Windgb 其他常用命令
!gcroot address 查看所有对指定地址的对象的引用

!dumpil Address 查看指定地址的IL
0:035> !dumpil 000007fe9e8af4a0
ilAddr = 0000000011b5a3e8
IL_0000: call System.Threading.Tasks.Task::get_Factory
IL_0005: ldsfld <>c::<>9__2_0
IL_000a: dup
IL_000b: brtrue.s IL_0024
IL_000d: pop
IL_000e: ldsfld <>c::<>9
IL_0013: ldftn <>c::<StartLogTask>b__2_0
IL_0019: newobj System.Action::.ctor
IL_001e: dup
IL_001f: stsfld <>c::<>9__2_0
IL_0024: callvirt System.Threading.Tasks.TaskFactory::StartNew
IL_0029: pop
IL_002a: ret

!savemodule moduleaddress path  保存具体的dll 到 某个路径

Windgb 其他常用命令

Windgb 其他常用命令

!heap 显示堆信息
  • !heap -a 显示某个进程下的堆信息(明细

Windgb 其他常用命令

Windgb 其他常用命令

!EEHeap [-gc] [-loader]  
显示被公共语言运行时内部数据结构使用的进程内存的有关信息。
-gc-loader 选项限制该命令的输出内容为垃圾收集器或者装载器的数据结构。
对于垃圾收集器,列出在托管堆里每一个节的范围信息。如果某指针是在EEHeap -gc给出的某个节范围内,那么该指针是一个对象指针。

Windgb 其他常用命令

Windgb 其他常用命令

!DumpHeap 将遍历 GC 堆对对象进行分析。通过指定不同的选项,可以查看特定的类型、数组和锁。
                  如果不加任何选项,该命令的输出首先为堆中对象的列表,然后是包含已发现类型的列表、大小和数量的报表。
其中 “Free” 对象代表的是垃圾回收器可以使用的区域。如果此区域的大小超过30%则可能意味着出现了堆碎片。
这通常是由于某些对象被持有了较长时间,并且结合了大量高频率的内存分配。
!DumpHeap 会针对此情况提供一个关于堆碎片化的警告
-stat              限定输出为类型统计分析的汇总
-min <size>    忽略尺寸小于给定的 bytes 值的对象
-max <size>   忽略尺寸大于给定的 bytes 值的对象
!dumpheap -min 850000 -stat   查找具体占用内存大的对象 -stat (是否统计输出)

Windgb 其他常用命令

Windgb 其他常用命令

Windgb 其他常用命令

Windgb 其他常用命令
有两个地址  查找该地址的引用   !gcroot 000000052f342dc8
!do address 显示某地址的对象的信息, 包括fields, EEClass, Method Table和object size

查找具体的位置 保存Model 到具体的地方 反编译查看原因

温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的认可,还可以获得学币奖励,请尊重他人的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
论坛交流群:672619046

小黑屋|手机版|站务邮箱|学逆向论坛 ( 粤ICP备2021023307号 )|网站地图

GMT+8, 2024-12-7 16:45 , Processed in 0.144567 second(s), 42 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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