Visual C/C++での呼び出し規約(calling convention)をまとめておきます。
(本記事の初稿は2004年です。64ビットCPUが普及した現在でも有用な内容と思われるので、そのままの内容で公開します。)
■__cdecl, __fastcall, __stdcall
引数の渡し方:スタック経由のみ スタックへの積み方:Right to Left スタックに積まれた引数の除去:関数を呼び出した側で行う。
引数の渡し方:(左側から)最初の2つはECX, EDX経由、残りはスタック経由 スタックへの積み方:Right to Left スタックに積まれた引数の除去:関数を呼び出された側で行う。
引数の渡し方:スタック経由のみ スタックへの積み方:Right to Left スタックに積まれた引数の除去:関数を呼び出された側で行う。 注:WIN32 APIを呼び出すときに使う呼び出し規約。
■その他
■あまり使わなさそうなもの __clrcall __thiscall naked(__naked) (関数の入口・出口での引数処理コードが生成されなくなる。VxDで使うらしい。) ■かつて使われていたもの __pascal __fortran __syscall
起草日:2004年10月11日(月)(www.marbacka.net内の別のサイトで公開)
最終更新日:2017年2月19日(日)