次の方法で共有


IDiaFrameData::get_program

現在の関数の呼び出しの前にレジスタ セットを計算するために使用されるプログラム文字列を取得します。

構文

HRESULT get_program ( 
   BSTR* pRetVal
);

パラメーター

pRetVal

[出力] プログラム文字列を返します。

戻り値

正常に終了した場合は、S_OK を返します。 このプロパティがサポートされていない場合は、S_FALSE を返します。 それ以外の場合はエラー コードを返します。

解説

プログラム文字列は、プロローグを確立するために解釈されるマクロのシーケンスです。 たとえば、一般的なスタックフレームでは、プログラム文字列 "$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + =" を使用する場合があります。 形式は、演算子がオペランドに続く逆ポーランド表記法です。 T0 は、スタック上の一時変数を表します。 この例では、次の手順を実行します。

  1. レジスタ ebp の内容を T0 に移動します。

  2. T0 の値に 4 を加算してアドレスを生成し、そのアドレスから値を取得して、値をレジスタ eip に格納します。

  3. T0 に格納されているアドレスから値を取得し、その値をレジスタ ebp に格納します。

  4. T0 の値に 8 を加算し、その値をレジスタ esp に格納します。

    プログラム文字列は、CPU と、現在のスタック フレームによって表される関数に設定されている呼び出し規則に固有であることに注意してください。

関連項目