C関数を使用している間、アセンブリで小さなプログラムを作成するように求められました。そうしている間、私は何か特定のものについて疑問を抱いていました。アセンブリからC関数 "exit"を呼び出すときにスタックをクリーニングする必要はありますか?
私はアセンブリを扱うとき、私はC関数を呼び出したいところはどこでも、私はスタックにそれの引数をプッシュしなければならないことを知って、そして関数が返された後、私はそれらの引数をポップ(またはesp
に4 × Xを追加する必要がありますここで、xはプッシュされた引数の数を表します)。特にCの関数を呼び出すときexit
、私は最初の状態のための引数をプッシュする必要があります。
私の質問はこれです。私のプログラムがエラーなしで動いたことを示すために0を押したいとしましょう。
exit
関数が返ってこないことを知っていて、それを使用しなければならず、exitシステムを自分自身で中断することはできません。どうすればこのスタックで0をポップできますか? exit
機能はそれを私のために実行しますか?
標準ライブラリの 'exit'関数に適切にアノテートされていなければ、オプティマイザに返されないことを通知します。 MSVC、GCC、ICCのいずれも、このような余分なスタッククリーンアップ命令を発行しません。 :-) –
ありがとうコーディー、良いコメント。 –
私も同様に考えていたが、確かめたかったありがとうございます。 – PeNpeL