软件调试实战:windbg 内核调试 (lkd kd )
http://advdbg.org/books/swdbg/samples.aspx
一,本地内核调试( lkd ):
管理员权限启动windbg,ctrl + k --> Local
二,查看进程数据结构
1. 启动计算器
2. !process 0 0 列出系统内的所有进程
3. dt _EPROCESS 88270030 (查看calc.exe 的EPROCESS结构)
4.!process 88270030 (查看calc.exe 的关键信息)
5. !token b1430a38 (查看calc.exe 的token信息)
6.查看peb (内核模式下,先设置隐式进程)
.process 88270030 (设置calc.exe 为隐式进程)
dt _PEB 7ffde000 (查看calc.exe peb)
7.!handle (查看calce.exe 句柄表 在calce.exe 进程环境)
.
8. !process 4 0 (查看system进程)
9. 查看 idle 进程
二 ,双机调试(kd) 环境配置:https://blog.****.net/huanongying131/article/details/90740286
1.查看双重错误 任务门(软件调试 p301)
2.查看当前任务门(tr)
3.产看中断描述表(idt)
三、UefSndThrd.exe练习(12章)
1.ctrl+e 打开执行文件
2.设置符号路径,源文件路径:
3.下bp断点
4.g 执行
5.继续:
6.从中可以看出:
主函数插入了一层异常(_XcptFilter)
四、dump练习
1.用everyting 搜.dmp 发现一堆 tim的dump OK 选一个来练习一下
2.ctrl+d
3.随便选一个
4. .ecrx (显示异常环境记录,重要的是 该指令还会却换到发生异常的线程环境
比如(~ (线程号)s .process EPROCESS地址) 都是确换环境,有了环境 kn 这些指令才能根据环境获取信息)
5. kv 查看栈回溯
五、蓝屏dump练习
1.本系统C:\Windows 目录下刚好有个MEMORY.dmp文件 直接用它
2.ctrl + d 打开dmp文件
2. BugCheck 7F (从 debugger.chm(windbg帮助文档)搜索 Bug Check 0x7F)
3. {8, 807ca750, 0, 0}
第一个参数 8
4. 照着文档的流程 练习一下
5. !analyze
6. kv (上面 可以知道 是哪个驱动导致的(Hooksys.sys) 看一下栈回溯 (分析一下驱动的哪一部分导致的))
7. .tss 0x28 查看任务状态段 (由上图可知是一个 tass gate 中断)
8. kv (上图 可以看出蓝屏是 nt!MiAllocatePoolPages+0x12 看一下哪一部分调到这里的)
9. .thread !thread (查看线程信息, 蓝屏环境是 当前线程 当前进程)
10. .process !process (查看当前进程)
11. !analyze -v(一步到位)(1--8 很繁琐 但刚开始分析 需要 理解原理 分析过程)
FAILURE_BUCKET_ID: 0x7f_8_Hooksys+1b2f6 BUGCHECK_STR: 0x7f_8
UNEXPECTED_KERNEL_MODE_TRAP (7f) Arg1: 00000008, EXCEPTION_DOUBLE_FAULT
12. ln ( 查看最后跳转 LAST_CONTROL_TRANSFER: from 83cabafe to 83d3247a)
ExpAllocateBigPool ---> MiAllocatePoolPages
六. TEB (24章)
打开计算器calc.exe,windbg F6 -->附加到calc.exe
1.dt ntdll!_NT_TIB
2. u ntdll!NtCurrentTeb
3.dd fs:[18] l1
4. dt ntdll!_NT_TIB 7ffd9000
5. dt _EXCEPTION_REGISTRATION_RECORD 0x0348f8c4
6. !exchain
7. u ntdll!RtlpGetRegistrationHead