• WinDbg常用命令系列---单步执行p*


    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时,每个指令都会在单步执行时显示出来。如果调试器在单步执行时遇到调用指令或中断,则被调用的子例程将完全执行,除非遇到断点。在调用或中断后的下一条指令中,控件将返回给调试器。每个步骤执行单个汇编指令或单个源行,这取决于调试器是处于汇编模式还是源模式。使用l+t和l-t命令或windbg工具栏上的按钮在这些模式之间切换。当您在windbg中多次快速单步执行时,调试信息窗口将在每个步骤之后更新。如果此更新导致响应时间变慢,请使用.suspend_ui (Suspend WinDbg Interface)暂时暂停刷新这些窗口。

    pa (Step to Address)

    pa命令执行程序,直到到达指定的地址,显示每个步骤。

    用户模式:

    [~Thread] pa [r] [= StartAddress] StopAddress ["Command"]
    

    内核模式:

    pa [r] [= StartAddress] StopAddress ["Command"]
    

    参数:

    • Thread
      指定要继续执行的线程。所有其他线程都被冻结。只能在用户模式下指定线程。
    • r
      打开和关闭寄存器和标志的显示。默认情况下,将显示寄存器和标志。可以使用pr、tr或.prompt_allow-reg命令禁用寄存器显示。所有这三个命令都控制着相同的设置,您可以使用它们中的任何一个来覆盖以前对这些命令的任何使用。也可以使用l-os命令禁用寄存器显示。此设置与其他三个命令不同。要控制显示哪些寄存器和标志,请使用rm (Register Mask)命令。
    • StartAddress
      指定执行应开始的地址。如果不使用startaddress,则从指令指针指向的指令开始执行
    • StopAddress
      指定停止执行的地址。此地址必须与指令的确切地址匹配。
    • Command
      指定要在执行步骤后执行的调试器命令。此命令在显示标准p结果之前执行。如果还使用count,则在所有步骤完成后(但在显示最后一步的结果之前)执行指定的命令。

    pa命令使目标开始执行。此执行将继续,直到到达指定的指令或遇到断点。如果在内核模式下使用此命令,则当在任何虚拟地址空间中的指定虚拟地址处遇到指令时,执行将停止。在此执行期间,所有步骤都将显式显示。被调用函数被视为单个单元。因此,此命令的显示与重复执行p(step)直到程序计数器到达指定地址时所看到的类似。

    例如,下面的命令显式地遍历目标代码,直到到达当前函数的返回地址。

    0:000> pa @$ra 
    

    下面的示例演示如何使用pa命令和kb命令来显示堆栈跟踪:

    0:000> pa 70b5d2f1 "kb"
    

    pc (Step to Next Call)

    pc命令执行程序,直到到达调用指令。

    用户模式:

    [~Thread] pc [r] [= StartAddress] [Count] 
    

    内核模式:

    pc [r] [= StartAddress] [Count] 
    

    参数:

    • Thread
      指定要继续执行的线程。所有其他线程都被冻结。只能在用户模式下指定线程。
    • r
      打开和关闭寄存器和标志的显示。默认情况下,将显示寄存器和标志。可以使用pr、tr或.prompt_allow-reg命令禁用寄存器显示。所有这三个命令都控制着相同的设置,您可以使用它们中的任何一个来覆盖以前对这些命令的任何使用。也可以使用l-os命令禁用寄存器显示。此设置与其他三个命令不同。要控制显示哪些寄存器和标志,请使用rm (Register Mask)命令。
    • StartAddress
      指定调试器开始执行的地址。否则,调试器从指令指针指向的指令开始。
    • Count
      指定调试器要停止此命令必须遇到的调用指令数。默认值为1。

    pc命令使目标开始执行。此执行将继续,直到达到调用指令或遇到断点。如果程序计数器已经在调用指令上,则执行整个调用。返回此调用后,将继续执行,直到到达另一个调用。这个调用的执行,而不是跟踪,是pc和tc(跟踪到下一个调用)之间的唯一区别。在源代码模式下,可以将一个源代码行与多个程序集指令相关联。pc命令不会在与当前源行关联的调用指令处停止。

    ph (Step to Next Branching Instruction)

    ph命令执行程序,直到到达任何类型的分支指令,包括条件或无条件分支、调用、返回和系统调用。

    用户模式:

    [~Thread] ph [r] [= StartAddress] [Count] 
    

    内核模式:

    ph [r] [= StartAddress] [Count] 
    

    参数:

    • Thread
      指定要继续执行的线程。所有其他线程都被冻结。只能在用户模式下指定线程。
    • r
      打开和关闭寄存器和标志的显示。默认情况下,将显示寄存器和标志。可以使用pr、tr或.prompt_allow-reg命令禁用寄存器显示。所有这三个命令都控制着相同的设置,您可以使用它们中的任何一个来覆盖以前对这些命令的任何使用。也可以使用l-os命令禁用寄存器显示。此设置与其他三个命令不同。要控制显示哪些寄存器和标志,请使用rm (Register Mask)命令。
    • StartAddress
      指定调试器开始执行的地址。否则,调试器从指令指针指向的指令开始。
    • Count
      指定要停止此命令必须遇到的分支指令数。默认值为1。

    ph命令使目标开始执行。此执行将继续执行,直到达到分支指令或遇到断点为止。如果程序计数器已经在分支指令上,则执行整个分支指令。返回此分支指令后,继续执行,直到到达另一个分支指令。调用的这种执行而不是跟踪是ph和th(跟踪到下一个分支指令)之间的唯一区别。在源模式下,可以将一个源行与多个汇编指令关联。ph命令不会在与当前源行关联的分支指令处停止。

    pt (Step to Next Return)

    Pt命令执行程序,直到达到返回指令。

    用户模式:

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

    内核模式:

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

    参数:

    • Thread
      指定要继续执行的线程。所有其他线程都被冻结。只能在用户模式下指定线程。
    • r
      打开和关闭寄存器和标志的显示。默认情况下,将显示寄存器和标志。可以使用pr、tr或.prompt_allow-reg命令禁用寄存器显示。所有这三个命令都控制着相同的设置,您可以使用它们中的任何一个来覆盖以前对这些命令的任何使用。也可以使用l-os命令禁用寄存器显示。此设置与其他三个命令不同。要控制显示哪些寄存器和标志,请使用rm (Register Mask)命令。
    • StartAddress
      指定调试器开始执行的地址。否则,调试器从指令指针指向的指令开始。
    • Count
      指定要停止此命令必须遇到的返回指令数。默认值为1。
    • Command
      指定要在执行步骤后执行的调试器命令。此命令在显示标准pt结果之前执行。如果还使用count,则在所有步骤完成后(但在显示最后一步的结果之前)执行指定的命令。

    pt命令将导致目标开始执行。 此执行将继续,直至返回达到指令或遇到断点。如果已经打开的程序计数器返回执行指令,整个返回。 返回此返回后,执行将继续,直到另一个返回为止。 此执行,而不是跟踪,在调用之间的唯一区别是pt tt (到下一步返回的 Trace)源模式中,可以将一个源行与多个程序集指令相关联。 pt命令不会停止处返回与当前的源行相关联的指令。

    pct (Step to Next Call or Return)

    pct命令执行程序,直到它到达调用指令或返回指令。

    用户模式:

    [~Thread] pct [r] [= StartAddress] [Count] 
    

    内核模式:

    pct [r] [= StartAddress] [Count]
    

    参数:

    • Thread
      指定要继续执行的线程。所有其他线程都被冻结。只能在用户模式下指定线程。
    • r
      打开和关闭寄存器和标志的显示。默认情况下,将显示寄存器和标志。可以使用pr、tr或.prompt_allow-reg命令禁用寄存器显示。所有这三个命令都控制着相同的设置,您可以使用它们中的任何一个来覆盖以前对这些命令的任何使用。也可以使用l-os命令禁用寄存器显示。此设置与其他三个命令不同。要控制显示哪些寄存器和标志,请使用rm (Register Mask)命令。
    • StartAddress
      指定调试器开始执行的地址。否则,调试器从指令指针指向的指令开始。
    • Count
      指定要停止此命令必须遇到的调用或返回指令数。默认值为1。

    pct命令使目标开始执行。此执行将继续,直到达到调用或返回指令或遇到断点为止。如果程序计数器已经在调用或返回指令上,则执行整个调用或返回。返回此调用或返回后,将继续执行,直到到达另一个调用或返回为止。这个调用的执行,而不是跟踪,是pct和tct(跟踪到下一个调用或返回)之间的唯一区别。在源代码模式下,可以将一个源代码行与多个程序集指令相关联。pct命令不会在与当前源代码行关联的调用或返回指令处停止。

  • 相关阅读:
    C#_委托
    一个asp+ACCESS省市二级联动菜单程序
    asp怎么实现二级联动下拉菜单
    ASP用户登录代码
    Windows 2003 IIS 不支持ASP的问题
    iptables
    VNC ( Virtual Network Computing )
    MongoDB的备份(mongodump)与恢复(mongorestore)
    Locally managed (LMT) vs. Dictionary managed (DMT) tablespace
    向现有的磁盘组加入/删除ASM磁盘
  • 原文地址:https://www.cnblogs.com/yilang/p/11459091.html
Copyright © 2020-2023  润新知