3

我正在反转一个 win32 应用程序。

问题:

在调试编。我发现计数器曾经跳转到地址 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之前执行获取上一条指令的地址。这样我就可以从调用此函数的位置进行跟踪。

提前致谢,

4

2 回答 2

3

用这个:

? $previp

前一个事件发生时的指令指针。(闯入调试器算作一个事件。)

有关其他伪寄存器,请参见此内容

于 2013-06-07T19:06:17.647 回答
1

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

于 2013-06-09T17:42:04.453 回答