NetRoc's Blog

N-Tech

 

WinDbg 文档翻译----53

cc682/NetRoc

http://netroc682.spaces.live.com/

m (Move Memory)

m 命令将内存内容从一个位置拷贝到另一个。

不要将该命令和~m (Resume Thread)命令混淆。

语法

m Range Address 

参数

Range

指定要拷贝的内存区域。该参数的语法的更多信息,查看地址和地址区域语法

Address

指定目标内存区域的起始地址。该参数的语法的更多信息,查看地址和地址区域语法

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

 

注释

Address 指定的内存区域可以是Range 指定的内存区域的一部分。重叠的移动也可以被正确的处理。

附加信息

关于内存操作的更多信息和其他内存相关命令的说明,查看读写内存

n (Set Number Base)

n命令将默认的数字基数(radix)设置为指定值,或者显示当前基数。

不要将该命令和~n (Suspend Thread)命令混淆。

语法

n [Radix

参数

Radix

设置用于数值显示的输入的默认基数。可以使用下面的值之一。

说明

8

8进制

10

10进制

16

16进制

 

如果省略Radix,则显示当前的默认基数。

环境

模式

用户模式、内核模式

目标

活动目标、崩溃转储

平台

所有

 

注释

当前基数会作用于MASM表达式的输入和输出。它并不作用于C++ 表达式的输入输出。关于这些表达式的更多信息,查看表达式求值

调试器启动时,默认的基数被设置为16。

在所有MASM表达式中,数字的值使用当前基数(16, 10, 或8)来进行解释。可以通过指定0x 前缀(16进制)、 0n 前缀(10进制)、0t 前缀(8进制)或者0y 前缀(2进制)来覆盖当前基数。

ob, ow, od (Output to Port)

obowod 命令将一个字节、字或者双字发送到指定端口。

语法

ob Address Value 
ow Address Value 
od Address Value 

参数

Address

指定端口地址。

Value

指定要写入端口的16进制值。

环境

模式

仅内核模式

目标

仅活动调试

平台

仅x86

 

注释

ob 命令写入单个字节、ow 命令写入一个WORD,od命令写入一个DWORD。

确认写入WORD或者DWORD的端口支持该大小。

参见

ib, id, iw (Input from Port)

p (Step)

p 命令执行一条指令或者一行源码,并且选择性的显示所有寄存器和标志位的结果。当发生子函数调用或中断时,他们被当作单独的一步。

语法

用户模式

[~Threadp [r] [= StartAddress] [Count] ["Command"

内核模式

p [r] [= StartAddress] [Count] ["Command"

参数

Thread

指定要继续执行的线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只能在用户模式下指定线程。

r

打开或关闭对寄存器和标志位的显示。默认情况下,寄存器和标志位会被显示出来。可以通过prtr.prompt_allow -reg 命令来禁止显示。这三个命令都可以用来控制该设置,并且可以覆盖之前使用这些命令进行任何设置。

也可以通过l-os 命令禁止对寄存器的显示。这个设置和其他三个命令是分开的。要控制哪些寄存器和标志位被显示出来,使用rm (Register Mask) 命令。

StartAddress

指定执行开始的地址。如果没有使用StartAddress,则从指令指针指向的指令开始执行。该语法的更多信息,查看地址和地址区域语法

Count

指定在停止前要单步执行的指令数量或源码行数。每一步在调试器命令窗口中都会显示为一个单独的动作。默认值为1。

Command

指定在单步完成后要执行的调试器命令。该命令在标准的p结果显示出来之前就会执行。如果还使用了Count,这个命令会在所有步骤都执行完成后才会执行(但是在最后一步的结果显示出来之前)。

环境

模式

用户模式、内核模式

目标

仅活动调试

平台

所有

 

注释

指定了Count 时,每条指令都会像单步执行它一样被显示出来。

如果调试器在单步的时候遇到call指令或中断,被调用的子函数如果没有遇到断点,会直接执行完成。到达调用或中断的下一条指令时,控制会返回给调试器。

根据调试器运行在汇编模式还是源码模式,每一步都执行单独的一条汇编指令或源代码行。使用l+tl-t 命令或者WinDbg工具栏上的按钮来在这些模式之间切换。

在WinDbg中快速的单步执行很多次时,调试信息窗口会在每一步之后都进行刷新。如果这种刷新造成响应时间变长,可以使用.suspend_ui (Suspend WinDbg Interface) 来临时暂停这些窗口的刷新。

附加信息

关于执行p命令的更多信息和其他相关命令的概述,查看控制调试目标

pa (Step to Address)

pa命令执行程序直到到达指定地址,每一步都会被显示出来。

语法

用户模式

[~Threadpa [r] [= StartAddressStopAddress ["Command"]

内核模式

pa [r] [= StartAddressStopAddress ["Command"]

参数

Thread

指定要继续执行的线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只能在用户模式下指定线程。

r

打开或关闭对寄存器和标志位的显示。默认情况下,寄存器和标志位会被显示出来。可以通过parprtr.prompt_allow -reg 命令来禁止显示。这些命令都可以用来控制该设置,并且可以覆盖之前使用这些命令进行任何设置。

也可以通过l-os 命令禁止对寄存器的显示。这个设置和其他三个命令是分开的。要控制哪些寄存器和标志位被显示出来,使用rm (Register Mask) 命令。

StartAddress

指定执行开始的地址,否则从指令指针指向的指令开始执行。该语法的更多信息,查看地址和地址区域语法

StopAddress

指定要停止执行的地址。该地址必须刚好是一条指令的地址。

Command

指定在单步完成后要执行的调试器命令。该命令在标准的pa结果显示出来之前就会执行。如果还使用了StopAddress,这个命令会在到达StopAddress后才会执行(但是在最后一步的结果显示出来之前)。

环境

模式

用户模式、内核模式

目标

仅活动调试

平台

所有

 

注释

pa 命令使得目标开始执行。这种执行会持续到到达指定的指令或遇到断点。

注意  如果在内核模式下使用该命令,在任何虚拟地址空间中,只要遇到指定的虚拟地址处的指令,执行就会停止。

执行时,所有步骤都会明确的显示出来。调用的函数被当作一个单位来执行。但是,该命令的显示和直接重复使用p (Step)直到程序计数器到达指定地址类似。

例如,下面的命令单步执行目标的代码直到到达当前函数的返回地址。

0:000> pa @$ra 

下面的命令演示了pakb命令命令一起用来显示堆栈回溯:

0:000> pa 70b5d2f1 "kb"

附加信息

相关命令的更多信息,查看控制调试目标

pc (Step to Next Call)

pc执行程序直到到达一条call指令。

语法

用户模式

[~Threadpc [r] [= StartAddress] [Count

内核模式

pc [r] [= StartAddress] [Count

参数

Thread

指定要继续执行的线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只能在用户模式下指定线程。

r

打开或关闭对寄存器和标志位的显示。默认情况下,寄存器和标志位会被显示出来。可以通过pcrprtr.prompt_allow -reg 命令来禁止显示。这些命令都可以用来控制该设置,并且可以覆盖之前使用这些命令进行任何设置。

也可以通过l-os 命令禁止对寄存器的显示。这个设置和其他三个命令是分开的。要控制哪些寄存器和标志位被显示出来,使用rm (Register Mask) 命令。

StartAddress

指定执行开始的地址,否则从指令指针指向的指令开始执行。该语法的更多信息,查看地址和地址区域语法

Count

指定遇到多少个call指令该命令才会停下来。默认值为1。

环境

模式

用户模式、内核模式

目标

仅活动调试

平台

所有

 

注释

pc 命令使的目标开始执行。这种执行一直持续到遇到call指令或断点。

如果程序计数器已经到达一个call指令,整个调用都会被执行。该调用返回后,执行会持续到遇到下一个call时。对这个调用进行执行而不是跟踪,是pctc (Trace to Next Call)唯一的不同。

在源码模式下,一行代码可能对应多条汇编指令。Pc命令不会在关联到当前源码行的call指令处停下来。

附加信息

相关命令的更多信息,查看控制调试目标

pct (Step to Next Call or Return)

pct 命令执行程序,直到遇到call指令或返回指令。

语法

用户模式

[~Threadpct [r] [= StartAddress] [Count

内核模式

pct [r] [= StartAddress] [Count

参数

Thread

指定要继续执行的线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只能在用户模式下指定线程。

r

打开或关闭对寄存器和标志位的显示。默认情况下,寄存器和标志位会被显示出来。可以通过pctrprtr.prompt_allow -reg 命令来禁止显示。这些命令都可以用来控制该设置,并且可以覆盖之前使用这些命令进行任何设置。

也可以通过l-os 命令禁止对寄存器的显示。这个设置和其他三个命令是分开的。要控制哪些寄存器和标志位被显示出来,使用rm (Register Mask) 命令。

StartAddress

指定执行开始的地址,否则从指令指针指向的指令开始执行。该语法的更多信息,查看地址和地址区域语法

Count

指定遇到多少个call或者return指令该命令才会停下来。默认值为1。

环境

模式

用户模式、内核模式

目标

仅活动调试

平台

所有

 

注释

pct 命令使得目标开始执行,直到遇到call或return指令或断点。

如果程序计数器正在一条callreturn指令上,则会执行整个调用或返回。当调用结束或返回之后,继续执行直到遇到其他callreturn。对这种调用进行执行而不是跟踪,是pcttct (Trace to Next Call or Return)唯一的不同。

源码模式下,一个代码行可能和多条汇编指令关联。pct 不会在当前源码行关联的callreturn处停止。

附加信息

相关命令的更多信息,查看控制调试目标

ph (Step to Next Branching Instruction)

ph命令执行程序直到遇到任何种类的分支指令,包括条件或非条件跳转、调用、返回和系统调用。

语法

用户模式

[~Threadph [r] [= StartAddress] [Count

内核模式

ph [r] [= StartAddress] [Count

参数

Thread

指定要继续执行的线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只能在用户模式下指定线程。

r

打开或关闭对寄存器和标志位的显示。默认情况下,寄存器和标志位会被显示出来。可以通过phrprtr.prompt_allow -reg 命令来禁止显示。这些命令都可以用来控制该设置,并且可以覆盖之前使用这些命令进行任何设置。

也可以通过l-os 命令禁止对寄存器的显示。这个设置和其他三个命令是分开的。要控制哪些寄存器和标志位被显示出来,使用rm (Register Mask) 命令。

StartAddress

指定执行开始的地址,否则从指令指针指向的指令开始执行。该语法的更多信息,查看地址和地址区域语法

Count

指定遇到多少个分支指令该命令才会停下来。默认值为1。

环境

模式

用户模式、内核模式

目标

仅活动调试

平台

所有

 

注释

ph 命令使得目标开始执行,直到遇到分支指令或断点。

如果程序计数器正在一条分支指令上,则会先执行该分支指令。当该指令结束之后,继续执行直到遇到其他分支指令。对这种分支进行执行而不是跟踪,是phth (Trace to Next Branching Instruction)唯一的区别。

源码模式下,一个代码行可能和多条汇编指令关联。ph 不会在当前源码行关联的分支指令处停止。

附加信息

相关命令的更多信息,查看控制调试目标

pt (Step to Next Return)

pt 命令执行程序直到遇到返回指令。

语法

用户模式

[~Threadpt [r] [= StartAddress] [Count] ["Command"]

内核模式

pt [r] [= StartAddress] [Count] ["Command"]

参数

Thread

指定要继续执行的线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只能在用户模式下指定线程。

r

打开或关闭对寄存器和标志位的显示。默认情况下,寄存器和标志位会被显示出来。可以通过ptrprtr.prompt_allow -reg 命令来禁止显示。这些命令都可以用来控制该设置,并且可以覆盖之前使用这些命令进行任何设置。

也可以通过l-os 命令禁止对寄存器的显示。这个设置和其他三个命令是分开的。要控制哪些寄存器和标志位被显示出来,使用rm (Register Mask) 命令。

StartAddress

指定执行开始的地址,否则从指令指针指向的指令开始执行。该语法的更多信息,查看地址和地址区域语法

Count

指定遇到多少个return指令该命令才会停下来。默认值为1。

Command

指定单步完成后要执行的调试器命令。该命令在标准的pt结果显示之前执行。如果还使用了Count,指定命令在所有步骤完成之后执行(但是在最后一步的结果显示之前)。

环境

模式

用户模式、内核模式

目标

仅活动调试

平台

所有

 

注释

pt 命令使得目标开始执行,直到遇到return指令或断点。

如果程序计数器正在一条return指令上,则会先执行整个返回过程。返回之后,继续执行直到遇到其他return指令。这种执行而不是跟踪,是pttt (Trace to Next Return)的唯一区别。

源码模式下,一个代码行可能和多条汇编指令关联。pt不会在当前源码行关联的return指令处停止。

下面的例子演示了使用ptkb命令一起显示调用堆栈:

0:000> pt "kb"

附加信息

相关命令的更多信息,查看控制调试目标

posted on 2008-06-18 14:30 NetRoc 阅读(339) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。

导航

统计

常用链接

留言簿(7)

随笔档案(99)

文章分类(35)

文章档案(32)

Friends

Mirror

搜索

最新评论

阅读排行榜

评论排行榜