1

ベクトル化された例外ハンドラーでは、次のようにスタック フレームをウォークスルーしています (32 ビット プロセスでは、FPO がないと仮定します)。

unsigned int *nextFrame;
unsigned int returnAddress;
__asm mov [nextFrame], ebp
while (!IsBadReadPtr(nextFrame, 8))
{
  nextFrame = (unsigned int *)*nextFrame;
  returnAddress = *(nextFrame + 1);
}

ただし、IsBadReadPtr数回繰り返した後、でアクセス違反が発生するため、停止条件が十分ではないようです*(nextFrame + 1)

正しい条件は何でしょう?

更新:IsBadReadPtr例外が発生 (および処理) されるため、VEH ではまったく使用できないことが判明しました。

Update2最後に、「ヒューリスティック」を使用してフレームの終了位置を検出しようとしました。現在のフレーム ポインターを前のフレーム ポインターと比較し、その差が妥当と思われない場合はループを中断します。

4

0 に答える 0