呼び出し規約
Visual C/C++での呼び出し規約(calling convention)をまとめておきます。
__cdecl, __fastcall, __stdcall
【__cdecl】
引数の渡し方:スタック経由のみ
スタックへの積み方:Right to Left
スタックに積まれた引数の除去:関数を呼び出した側で行う。
【__fastcall】
引数の渡し方:(左側から)最初の2つはECX, EDX経由、残りはスタック経由
スタックへの積み方:Right to Left
スタックに積まれた引数の除去:関数を呼び出された側で行う。
【__stdcall】
引数の渡し方:スタック経由のみ
スタックへの積み方:Right to Left
スタックに積まれた引数の除去:関数を呼び出された側で行う。
注:WIN32 APIを呼び出すときに使う呼び出し規約。
その他
【その他の呼び出し規約】
■あまり使わなさそうなもの
__clrcall
__thiscall
naked(__naked) (関数の入口・出口での引数処理コードが生成されなくなる。VxDで使うらしい。)
■かつて使われていたもの
__pascal
__fortran
__syscall
執筆日:2004年10月11日(月)