0

スタック トレースが破損しているように見えるランタイム クラッシュをデバッグしています (昨日の関連する質問を参照してください: EBP フレーム ポインターが NULL の場合、スタックは破損していますか? )。

スタックが破損しているにもかかわらず、対応する .map ファイル内の関数の正確な位置を指すスタック上の多くの値が表示されます。さらに、これらの関数は (完全ではないにしても、ほとんどの場合) この場合スタックに表示されるはずの関数です。

1 つの例 (多数あります) として、スタック値と対応する .map エントリ値を次に示します。

0588fe5c: 005caa30 (stack address / value at that address)

0001:001c9a30 __ehhandler$?ProcessTAFRequest@TQueryThread@@UAEXXZ 005caa30 f portable_source:UQueryThread.obj
(.map file entry indicating that address 005caa30 is the starting location of the function noted)

スタックが上部付近を除いて破損しておらず、スタック フレームと対応する EIP (リターン アドレス) ポインターに何らかの形で対応している関数アドレスが表示されていると仮定すると (おそらく誤って)、私の質問は次のとおりです。スタックに対応する .map ファイル内の関数の位置の正確な値は? 過去に、破損していないスタック トレースを何度も確認しましたが、常に、スタック フレーム内の EIP ポインタは、.map ファイルにリストされている対応する関数の場所ではなく、近くを指しています。(通常、戻りアドレスは関数の先頭ではなく途中にあるため、これは理にかなっています)。

誰かが光を当てることができますか?

4

0 に答える 0