IDiaFrameData::get_program
現在の関数の呼び出しの前にレジスタ セットを計算するために使用されるプログラム文字列を取得します。
構文
HRESULT get_program (
BSTR* pRetVal
);
パラメーター
pRetVal
[出力] プログラム文字列を返します。
戻り値
正常に終了した場合は、S_OK
を返します。 このプロパティがサポートされていない場合は、S_FALSE
を返します。 それ以外の場合はエラー コードを返します。
解説
プログラム文字列は、プロローグを確立するために解釈されるマクロのシーケンスです。 たとえば、一般的なスタックフレームでは、プログラム文字列 "$T0 $ebp = $eip $T0 4 + ^ = $ebp $T0 ^ = $esp $T0 8 + ="
を使用する場合があります。 形式は、演算子がオペランドに続く逆ポーランド表記法です。 T0
は、スタック上の一時変数を表します。 この例では、次の手順を実行します。
レジスタ
ebp
の内容をT0
に移動します。T0
の値に4
を加算してアドレスを生成し、そのアドレスから値を取得して、値をレジスタeip
に格納します。T0
に格納されているアドレスから値を取得し、その値をレジスタebp
に格納します。T0
の値に8
を加算し、その値をレジスタesp
に格納します。プログラム文字列は、CPU と、現在のスタック フレームによって表される関数に設定されている呼び出し規則に固有であることに注意してください。