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)
ob、ow和od 命令将一个字节、字或者双字发送到指定端口。
语法
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 命令执行一条指令或者一行源码,并且选择性的显示所有寄存器和标志位的结果。当发生子函数调用或中断时,他们被当作单独的一步。
语法
用户模式
[~Thread] p [r] [= StartAddress] [Count] ["Command"]
内核模式
p [r] [= StartAddress] [Count] ["Command"]
参数
Thread
指定要继续执行的线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只能在用户模式下指定线程。
r
打开或关闭对寄存器和标志位的显示。默认情况下,寄存器和标志位会被显示出来。可以通过pr、 tr或.prompt_allow -reg 命令来禁止显示。这三个命令都可以用来控制该设置,并且可以覆盖之前使用这些命令进行任何设置。
也可以通过l-os 命令禁止对寄存器的显示。这个设置和其他三个命令是分开的。要控制哪些寄存器和标志位被显示出来,使用rm (Register Mask) 命令。
StartAddress
指定执行开始的地址。如果没有使用StartAddress,则从指令指针指向的指令开始执行。该语法的更多信息,查看地址和地址区域语法。
Count
指定在停止前要单步执行的指令数量或源码行数。每一步在调试器命令窗口中都会显示为一个单独的动作。默认值为1。
Command
指定在单步完成后要执行的调试器命令。该命令在标准的p结果显示出来之前就会执行。如果还使用了Count,这个命令会在所有步骤都执行完成后才会执行(但是在最后一步的结果显示出来之前)。
环境
|
模式
|
用户模式、内核模式
|
|
目标
|
仅活动调试
|
|
平台
|
所有
|
注释
指定了Count 时,每条指令都会像单步执行它一样被显示出来。
如果调试器在单步的时候遇到call指令或中断,被调用的子函数如果没有遇到断点,会直接执行完成。到达调用或中断的下一条指令时,控制会返回给调试器。
根据调试器运行在汇编模式还是源码模式,每一步都执行单独的一条汇编指令或源代码行。使用l+t 和l-t 命令或者WinDbg工具栏上的按钮来在这些模式之间切换。
在WinDbg中快速的单步执行很多次时,调试信息窗口会在每一步之后都进行刷新。如果这种刷新造成响应时间变长,可以使用.suspend_ui (Suspend WinDbg Interface) 来临时暂停这些窗口的刷新。
附加信息
关于执行p命令的更多信息和其他相关命令的概述,查看控制调试目标。
pa (Step to Address)
pa命令执行程序直到到达指定地址,每一步都会被显示出来。
语法
用户模式
[~Thread] pa [r] [= StartAddress] StopAddress ["Command"]
内核模式
pa [r] [= StartAddress] StopAddress ["Command"]
参数
Thread
指定要继续执行的线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只能在用户模式下指定线程。
r
打开或关闭对寄存器和标志位的显示。默认情况下,寄存器和标志位会被显示出来。可以通过par、pr、tr或.prompt_allow -reg 命令来禁止显示。这些命令都可以用来控制该设置,并且可以覆盖之前使用这些命令进行任何设置。
也可以通过l-os 命令禁止对寄存器的显示。这个设置和其他三个命令是分开的。要控制哪些寄存器和标志位被显示出来,使用rm (Register Mask) 命令。
StartAddress
指定执行开始的地址,否则从指令指针指向的指令开始执行。该语法的更多信息,查看地址和地址区域语法。
StopAddress
指定要停止执行的地址。该地址必须刚好是一条指令的地址。
Command
指定在单步完成后要执行的调试器命令。该命令在标准的pa结果显示出来之前就会执行。如果还使用了StopAddress,这个命令会在到达StopAddress后才会执行(但是在最后一步的结果显示出来之前)。
环境
|
模式
|
用户模式、内核模式
|
|
目标
|
仅活动调试
|
|
平台
|
所有
|
注释
pa 命令使得目标开始执行。这种执行会持续到到达指定的指令或遇到断点。
注意 如果在内核模式下使用该命令,在任何虚拟地址空间中,只要遇到指定的虚拟地址处的指令,执行就会停止。
执行时,所有步骤都会明确的显示出来。调用的函数被当作一个单位来执行。但是,该命令的显示和直接重复使用p (Step)直到程序计数器到达指定地址类似。
例如,下面的命令单步执行目标的代码直到到达当前函数的返回地址。
0:000> pa @$ra
下面的命令演示了pa和kb命令命令一起用来显示堆栈回溯:
0:000> pa 70b5d2f1 "kb"
附加信息
相关命令的更多信息,查看控制调试目标。
pc (Step to Next Call)
pc执行程序直到到达一条call指令。
语法
用户模式
[~Thread] pc [r] [= StartAddress] [Count]
内核模式
pc [r] [= StartAddress] [Count]
参数
Thread
指定要继续执行的线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只能在用户模式下指定线程。
r
打开或关闭对寄存器和标志位的显示。默认情况下,寄存器和标志位会被显示出来。可以通过pcr、 pr、tr或.prompt_allow -reg 命令来禁止显示。这些命令都可以用来控制该设置,并且可以覆盖之前使用这些命令进行任何设置。
也可以通过l-os 命令禁止对寄存器的显示。这个设置和其他三个命令是分开的。要控制哪些寄存器和标志位被显示出来,使用rm (Register Mask) 命令。
StartAddress
指定执行开始的地址,否则从指令指针指向的指令开始执行。该语法的更多信息,查看地址和地址区域语法。
Count
指定遇到多少个call指令该命令才会停下来。默认值为1。
环境
|
模式
|
用户模式、内核模式
|
|
目标
|
仅活动调试
|
|
平台
|
所有
|
注释
pc 命令使的目标开始执行。这种执行一直持续到遇到call指令或断点。
如果程序计数器已经到达一个call指令,整个调用都会被执行。该调用返回后,执行会持续到遇到下一个call时。对这个调用进行执行而不是跟踪,是pc和tc (Trace to Next Call)唯一的不同。
在源码模式下,一行代码可能对应多条汇编指令。Pc命令不会在关联到当前源码行的call指令处停下来。
附加信息
相关命令的更多信息,查看控制调试目标。
pct (Step to Next Call or Return)
pct 命令执行程序,直到遇到call指令或返回指令。
语法
用户模式
[~Thread] pct [r] [= StartAddress] [Count]
内核模式
pct [r] [= StartAddress] [Count]
参数
Thread
指定要继续执行的线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只能在用户模式下指定线程。
r
打开或关闭对寄存器和标志位的显示。默认情况下,寄存器和标志位会被显示出来。可以通过pctr、 pr、tr或.prompt_allow -reg 命令来禁止显示。这些命令都可以用来控制该设置,并且可以覆盖之前使用这些命令进行任何设置。
也可以通过l-os 命令禁止对寄存器的显示。这个设置和其他三个命令是分开的。要控制哪些寄存器和标志位被显示出来,使用rm (Register Mask) 命令。
StartAddress
指定执行开始的地址,否则从指令指针指向的指令开始执行。该语法的更多信息,查看地址和地址区域语法。
Count
指定遇到多少个call或者return指令该命令才会停下来。默认值为1。
环境
|
模式
|
用户模式、内核模式
|
|
目标
|
仅活动调试
|
|
平台
|
所有
|
注释
pct 命令使得目标开始执行,直到遇到call或return指令或断点。
如果程序计数器正在一条call或return指令上,则会执行整个调用或返回。当调用结束或返回之后,继续执行直到遇到其他call或return。对这种调用进行执行而不是跟踪,是pct 和tct (Trace to Next Call or Return)唯一的不同。
源码模式下,一个代码行可能和多条汇编指令关联。pct 不会在当前源码行关联的call或return处停止。
附加信息
相关命令的更多信息,查看控制调试目标。
ph (Step to Next Branching Instruction)
ph命令执行程序直到遇到任何种类的分支指令,包括条件或非条件跳转、调用、返回和系统调用。
语法
用户模式
[~Thread] ph [r] [= StartAddress] [Count]
内核模式
ph [r] [= StartAddress] [Count]
参数
Thread
指定要继续执行的线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只能在用户模式下指定线程。
r
打开或关闭对寄存器和标志位的显示。默认情况下,寄存器和标志位会被显示出来。可以通过phr、 pr、tr或.prompt_allow -reg 命令来禁止显示。这些命令都可以用来控制该设置,并且可以覆盖之前使用这些命令进行任何设置。
也可以通过l-os 命令禁止对寄存器的显示。这个设置和其他三个命令是分开的。要控制哪些寄存器和标志位被显示出来,使用rm (Register Mask) 命令。
StartAddress
指定执行开始的地址,否则从指令指针指向的指令开始执行。该语法的更多信息,查看地址和地址区域语法。
Count
指定遇到多少个分支指令该命令才会停下来。默认值为1。
环境
|
模式
|
用户模式、内核模式
|
|
目标
|
仅活动调试
|
|
平台
|
所有
|
注释
ph 命令使得目标开始执行,直到遇到分支指令或断点。
如果程序计数器正在一条分支指令上,则会先执行该分支指令。当该指令结束之后,继续执行直到遇到其他分支指令。对这种分支进行执行而不是跟踪,是ph 和th (Trace to Next Branching Instruction)唯一的区别。
源码模式下,一个代码行可能和多条汇编指令关联。ph 不会在当前源码行关联的分支指令处停止。
附加信息
相关命令的更多信息,查看控制调试目标。
pt (Step to Next Return)
pt 命令执行程序直到遇到返回指令。
语法
用户模式
[~Thread] pt [r] [= StartAddress] [Count] ["Command"]
内核模式
pt [r] [= StartAddress] [Count] ["Command"]
参数
Thread
指定要继续执行的线程。所有其它线程都会被冻结。该语法的更多信息,查看线程语法。只能在用户模式下指定线程。
r
打开或关闭对寄存器和标志位的显示。默认情况下,寄存器和标志位会被显示出来。可以通过ptr、 pr、tr或.prompt_allow -reg 命令来禁止显示。这些命令都可以用来控制该设置,并且可以覆盖之前使用这些命令进行任何设置。
也可以通过l-os 命令禁止对寄存器的显示。这个设置和其他三个命令是分开的。要控制哪些寄存器和标志位被显示出来,使用rm (Register Mask) 命令。
StartAddress
指定执行开始的地址,否则从指令指针指向的指令开始执行。该语法的更多信息,查看地址和地址区域语法。
Count
指定遇到多少个return指令该命令才会停下来。默认值为1。
Command
指定单步完成后要执行的调试器命令。该命令在标准的pt结果显示之前执行。如果还使用了Count,指定命令在所有步骤完成之后执行(但是在最后一步的结果显示之前)。
环境
|
模式
|
用户模式、内核模式
|
|
目标
|
仅活动调试
|
|
平台
|
所有
|
注释
pt 命令使得目标开始执行,直到遇到return指令或断点。
如果程序计数器正在一条return指令上,则会先执行整个返回过程。返回之后,继续执行直到遇到其他return指令。这种执行而不是跟踪,是pt 和tt (Trace to Next Return)的唯一区别。
源码模式下,一个代码行可能和多条汇编指令关联。pt不会在当前源码行关联的return指令处停止。
下面的例子演示了使用pt和kb命令一起显示调用堆栈:
0:000> pt "kb"
附加信息
相关命令的更多信息,查看控制调试目标。