获取WinDBG中上次执行指令的地址

时间:2013-06-07 18:50:23

标签: windbg

我正在撤销win32应用。

问题:

调试prog时。我发现计数器一旦跳到地址0x0043D4A0。 (这是一个函数入口点)。

  0043D4A0   51               PUSH ECX
  0043D4A1   8B51 04          MOV EDX,DWORD PTR DS:[ECX+4]
  0043D4A4   8B4424 0C        MOV EAX,DWORD PTR SS:[ESP+C]
  0043D4A8   3BC2             CMP EAX,EDX
  0043D4AA   890C24           MOV DWORD PTR SS:[ESP],ECX
  0043D4AD   7D 06            JGE SHORT PEiD.0043D4B5
  0043D4AF   32C0             XOR AL,AL
  0043D4B1   59               POP ECX

现在我想知道如何在使用windbg跳转到这一点0x0043D4A0之前获取先前指令的获取地址。因此,我可以从这个函数的调用位置进行跟踪。

先谢谢,

2 个答案:

答案 0 :(得分:3)

使用此:

? $previp
  

上一个事件时的指令指针。 (断   进入调试器计为事件。)

有关其他伪造的寄存器

,请参阅this

答案 1 :(得分:1)

每当发生调用指令时,在控制转移到被调用函数之前,返回地址被立即压入堆栈。返回地址是ESP寄存器中的4个字节。在@ESP上运行dd命令,然后对@ESP上的值运行ub命令​​。这将从返回地址向后反汇编,这将为您提供在紧接呼叫之前发生的一系列指令。