【windbg】各种场景下的调试情况汇总

概述:整理汇总各种场景下的调试方法

可参考微软官方文档调试:调试方法 - Windows drivers | Microsoft Learn

调试LDR

1
2
3
4
5
6
7
8
9
10
bp ntdll!LdrLoadDll

在断点下输入:

eb Kd_LDR_MASK ffffffff
eb Kd_MM_MASK ffffffff
eb Kd_DEFAULT_MASK ffffffff

eb ntdll!ShowSnaps 1
eb ntdll!ShowErrors 1

查看dll加载

1
eb ntdll!ShowSnaps 1

eb ntdll!ShowSnaps 1这一命令是在Windows的NT操作系统内核(ntdll.dll)中调试多线程应用程序时使用的。它用于启用或禁用快照调试(Snapshots),这是一种在调试期间捕获特定系统状态的调试技术。

在这里,eb是指“编辑二进制”(Edit Binary)的命令,它允许你修改内存中的二进制数据。ntdll!ShowSnaps是你要修改的函数,而1是你要设置的值。在调试多线程应用时,ShowSnaps函数用于控制是否启用快照调试。如果将其设置为1,则启用快照调试;如果设置为0,则禁用快照调试。

需要注意的是,修改系统内核的代码可能会对系统造成严重的破坏,因此,除非你非常清楚自己在做什么,否则不建议进行这样的操作。在大多数情况下,如果你认为需要修改系统内核的代码来调试你的应用程序,那么你可能需要寻找其他方法,或者寻求专业的帮助。

设置日志记录位置

1
.logopen /t c:\logs\mylogfile.txt

查看call 寄存器时调用的函数

相关文章: 【调试技术】logexts

1
2
3
4
5
6
7
8
bu RPCRT4!Invoke+0x73 "u r10"

bu RPCRT4!Invoke+0x73-5 "r ;gc"

# 高级一点的用法
# 在 r10 被更新后看就可以了

bu RPCRT4!Invoke+0x73-2d "u r10 l5;gc"

调试的汇编代码如下所示,为 RPCRT4!invoke+73的位置

当然还有可能会因为反汇编失败导致阻塞,这里可以根据自己的需求加入一些判断。

1
2
# 先保存一下寄存器,如果函数执行结束后返回的值为0,则对原来的地址进行反汇编,否则不执行操作
ba e1 RPCRT4!Invoke+0x62 "r $t1 = @r10;p;.if(@eax == 0){gc}.else{r;? @r10}"

【windbg】各种场景下的调试情况汇总
https://hodlyounger.github.io/wiki/调试技术/【调试技术】各种场景下调试汇总/
作者
mingming
发布于
2024年9月5日
许可协议