您的位置:首页 > 其它

Windbg调试命令详解(3)

2013-10-14 18:08 387 查看
  3 进程与线程

  既可以显示进程和线程列表,又可以显示指定进程或线程的详细信息。调试命令可以提供比taskmgr更详尽的进程资料,在调试过程中不可或缺。

  3.1 进程命令

  进程命令包括这些内容:显示进程列表、进程环境块、设置进程环境。

  进程列表

  多个命令可显示进程列表,但一般只能在特定情况下使用,它们是:|、.tlist、!process和!dml_proc。

  竖线命令显示当前被调试进程列表的状态信息,这个命令在本章开头已作过介绍,命令格式如下:

  | [进程号]

  请注意这里的定语:被调试进程列表。大多数情况下调试器中只有一个被调试进程,但可以通过.attach或者.create命令同时挂载或创建多个调试对象。当同时对多个进程调试时,进程号是从0开始的整数。下图中显示了两个被调试的进程。

  如何在多个进程间进行切换呢?使用s参数即可,这一点前文已然讲过。

  .tlist [选项] [模块名]

  .tlist命令显示当前系统中的进程列表,他是目前唯一可在用户模式下显示系统当前进程列表的命令。它有两个可选项:-v显示进程详细信息,-c只显示当前进程信息。

  内核模式下同样可以使用.tlist,但更好的命令是!process。!process在内核模式下显示进程列表,和指定进程的详细信息,也能显示进程中的线程和调用栈内容。典型格式如下:

  !process: 显示调试器当前运行进程信息

  !process 0 0: 显示进程列表

  !process PID: PID是进程ID,根据进程ID显示此进程详细信息。

  此外,还有一个DML版本的进程列表命令,如下:

  !dml_proc [进程号|进程地址]

  此命令可以看成“|”和“!process”命令的DML合并版本,可在用户与内核模式下使用。显示的进程信息偏重于线程和调用栈。用户模式下此命令和“|”一样,只能显示被调试进程的信息。右图是内核模式下使用此命令的效果:

  进程信息

  进程环境块(Process Enviroment Block)是内核结构体,使用!peb命令参看其信息,但也可以用dt命令查看完整的结构体定义。格式如下:

  !peb [地址]

  如果未设置PEB地址,则默认为当前进程。内核模式下可通过!process命令获取PEB结构体地址;用户模式下只能显示当前进程的PEB信息,故而一般不带参数。

  dt nt!_peb 地址

  此命令显示系统nt模块中所定义的内核结构体PEB详细内容。使用之前必须先熟悉结构体定义。

  进程切换

  进程环境的切换,将伴随着与进程相关的寄存器、堆栈的切换。在不同进程环境中进行的调试结果有天壤之别。上文在讲“|”命令的时候,讲过用户环境下多进程间如何互相切换,使用命令:

  | [进程号] s

  那么内核模式下,情况又不同了。内核模式下的进程切换,不同于用户模式下的被调试进程间切换,而是系统存在的多进程间切换。内核环境下,以进程地址作为参数,调用如下命令以进行进程环境切换:

  .process [进程地址]

  如果不使用任何参数,.process命令将显示当前进程地址。所谓进程地址,即ERPCESS结构体地址。

  或以页目录地址为参数,调用下面命令切换用户地址空间:

  .context [页目录地址]

  如果不使用任何参数,.context命令将显示当前页目录地址。页目录地址就是!process命令中显示的DirBase值。

  进程切换后,为了检测是否正确切换,可再用!peb命令检查当前进程的环境信息。

  3.2 线程命令

  命令“~”能够进行线程相关的操作。不带任何参数的情况下,它列出当前调试进程的线程。下图是计算器进程某时刻的线程列表:

  ||0:0:001> ~

  # 0 Id: f78.374 Suspend: 0 Teb: 000007ff`fffdc000 Unfrozen

  . 1 Id: f78.fb0 Suspend: 0 Teb: 000007ff`fffda000 Unfrozen

  2 Id: f78.a4c Suspend: 0 Teb: 000007ff`fffd8000 Unfrozen

  3 Id: f78.22c8 Suspend: 0 Teb: 000007ff`fff9a000 Unfrozen

  4 Id: f78.2658 Suspend: 0 Teb: 000007ff`fffd4000 Unfrozen

  5 Id: f78.cbc Suspend: 0 Teb: 000007ff`fff96000 Unfrozen

  6 Id: f78.21ec Suspend: 0 Teb: 000007ff`fffd6000 Unfrozen

  使用此命令可进行的线程操作包括:线程切换、线程环境、线程时间等。

  线程冰冻
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: