VC++2010でインラインアセンブラをつかって、現在のスタックポインタの値を
取得したいです。
============ここから=============================
unsigned long GetStackPointer(void)
{
__asm movl %esp,%eax
}
int main(void)
{
long esp;
esp=GetStackPointer();
printf("スタックポインタの値->0x%x\n",esp);
return 0;
}
============ここまで===========================
ところが、
「オペコード' の 'MOD' はインライン アセンブラーの構文エラーになります。」
とエラーになりました。
(オペコードは"movl"のはずなのになぜか"mod"となってエラーが報告されます・・・・・)
何がまずかったのでしょうか?
インラインアセンブラによるスタックポインタの値の取得
Re:インラインアセンブラによるスタックポインタの値の取得
それはgccのアセンブラ用の書き方ですね
VisualC++では使えません
%が剰余(MOD)として処理されたのでしょう
自信ないですが
__asm mov eax, esp
のように書くのだと思います
VisualC++では使えません
%が剰余(MOD)として処理されたのでしょう
自信ないですが
__asm mov eax, esp
のように書くのだと思います
Re:インラインアセンブラによるスタックポインタの値の取得
ありがとうございます。
無事にスタックポインタの値がわかりました。
自分が書いていたのはgccの文法だったのですね!
ありがとうございました。
無事にスタックポインタの値がわかりました。
自分が書いていたのはgccの文法だったのですね!
ありがとうございました。
Re:インラインアセンブラによるスタックポインタの値の取得
関数を呼び出した時点でスタックポインタの値を破壊してしまうので、その方法では正確な値を取得することは困難かと思います。
関数全体をアセンブリ言語で記述し、呼出し時に戻り先番地をスタックに積んだ分を調整する必要があります。
関数全体をアセンブリ言語で記述し、呼出し時に戻り先番地をスタックに積んだ分を調整する必要があります。
Re:インラインアセンブラによるスタックポインタの値の取得
ありがとうございます。
たしかに考えていた挙動と違っていました・・・・
別の方法を考えたいと思います。
ありがとうございました。
たしかに考えていた挙動と違っていました・・・・
別の方法を考えたいと思います。
ありがとうございました。