进程 线程
!process | <process> <flag 0-7> <image name> | process 就是任务管理器里面的进程ID16进制 | !process 0 0 !process 0 0 everything.exe !process ffffc283dd15f0c0 7 | Kernel mode |
.process | /i | 切换进程 | .process /i 0x69ac50c0 | kernel |
~ | 列举当前进程所有线程 | User mode | ||
!thread | Address | 显示线程信息 | !thread – 1 0 !thread 0xffffcb088f0a448 | kernel |
~0s | 内核态:切换CPU 用户态:切换线程 | ~0s ~1s | Kernel mode、user mode | |
.thread ffffba86053d1200 |
一些 常见得命令补充:
!pci 100 0x3f 0 0 查看0x3f这个设备PCIE解析过的空间
.kdfiles -m System32\drivers\xx windbg 替换驱动
!reg querykey \REGISTRY\MACHINE\SYSTEM\ControlSet001\services 查注册表
打印WPP日志
.load rcdrkd
!rcdrkd.rcdrlogdump icp_qat4.sys 打日志
!rcdrkd.rcdrlogdump icp_qat4.sys -d 打debug日志
!stacks 2 xxx 显示xxx相关的线程. 命令需要花费比较长得时间
PF windbg查看VF configuration space用这个命令即可,其中VF的BDF在PF基础上加偏移n,n为VF的偏移位。
102: kd> !pci 0x100 6b 0 n
102: kd> !pci 0x100 6b 0 1
!verifier 3 drivername 分析内存泄漏
保存到文件
.logopen c:\2060_ok.txt
!dd [uc]2060FF600000 l 80000
!dd [uc]2060FF800000 l 200000
.logclose
如何用VS远程调试R3程序
1,找到VS对应版本的Remote Debugger文件夹(用everthing搜索)
2,复制对应位数的远程调试文件夹到目标机器上(目标机器为32位复制x86,反之复制x64)
3,管理员权限打开msvsmon.exe,点开菜单栏的Tools,记下端口号,并在下方选择No Authentication-Allow any user to debug
4,在本地VS中上方菜单栏将Local Windows Debugger改为Remote Windows Debugger
5,点开要调试项目的属性,选择Debugging项,在Debugger to launch 中选择Remote Windows Debugger,在Remote Server Name中填上机器IP:PORT,在Remote Command中填上对应程序的exe完整路径+名字(如:c:\1\2.exe),在Working Directory中填写对应程序的exe目录(如:c:\1),在Connection中选择Remote with no authentication。如有命令行参数需求,可以在Remote Command Arguments中填上。完成后点击保存
6,回到VS界面,点击上方绿色箭头开始调试
PS:注意关闭双边防火墙
PS2:如何远程调试dll?在对应dll的pdb在本地的情况下,用上面方式调试一个加载dll的exe,在LoadLibrary的时候F11单步步入可以进入dll的DllMain函数,在后续动态调用dll对应函数(GetProcessAddr获取的函数)时F11单步步入可以进入到dll对应的函数,并且自动加载dll的源文件。如果没有PDB要进入对应函数,可以在VS最上方菜单栏中选择打开汇编窗口,依旧可以F11单步步入。
PS3:VS调试管理员权限的程序需要自身是管理员权限启动,如果是远程调试程序需要管理员权限则远端机器上msvsmon.exe需管理员权限启动
Windbg 配置
bcdedit /debug on
bcdedit /dbgsettings net hostip:10.112.137.125 port:50010 key:1.2.3.4
bcdedit /set "{dbgsettings}" busparams 184.0.2
bcdedit -set TESTSIGNING ON
shutdown -r -t 0
!dma Adapter [Flags 7f]
!devstack xxx
!numa
!token
!cs 锁的地址 就能看到谁占用了这个锁
Qd 结束会话
!handle 120 f 打印hangle 120 的信息
!pte addr
!peb 进程环境块
!teb 线程环境块
ba r4 nt!NtGlobalFlag / ba rc 7763d879 读4字节
lm 列举已经加载的模块以及起始地址
lmv -m icp_qat4 查看详细信息 可以看到pdb加载情况
~*k 列出进程所有线程堆栈
~0k 0号线程堆栈
.locks
!idt -a
.tss 58
!dpcs