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

call 命令が発生すると、呼び出された関数に制御が移る直前に戻りアドレスがスタックにプッシュされます。戻りアドレスは、ESP レジスタ内の 4 バイトです。@ESP で dd コマンドを実行してから、@ESP の値で ub コマンドを実行します。これにより、戻りアドレスから逆方向に逆アセンブルされ、呼び出しの直前に行われた一連の命令が得られます。

于 2013-06-09T17:42:04.453 に答える