• ベストアンサー

スタックポインタ取得 アセンブラ

unsigned long sp(void) { __asm__("movl %esp,%eax"); } int main() { printf("0x%x\n", sp()); return 0; } このプログラムはスタックポインタのアドレスを表示することができるそうなのですが、何故なのか分からないので理由を教えていただきたいです。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

>__asm__("movl %esp,%eax"); 意図的には、ここでスタックポインタを戻り値として帰るようにしてるからですけど ただ、これでスタックポインタの値が得られているのはたまたま(場合によってはそうならないかもしれないという意味)。 また、それで得られるのは関数sp()でのスタックポインタの値です。

honnkideanataga
質問者

お礼

お礼遅くなりすいません; ありがとうございました。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

厳密には「あなたの使った処理系がそういうものだから」としか言いようがない. 細かい話は ABI で調べるといいかも.

honnkideanataga
質問者

お礼

ABIですね。ありがとうございました。

関連するQ&A