トップページ
ひらく | たたむ | ページトップ
↓マウスで反転選択した文字を検索
C
   
ページ内検索 ページ外検索
検索したい文字を入力して
ENTERを押すと移動します。
\n
[ トップページ ]
[ ____CommandPrompt ] [ ____JScript ] [ ____MySQL ] [ ____Cygwin ] [ ____Java ] [ ____Emacs ] [ ____Make ] [ ____Perl ] [ ____Python ] [ ____OpenGL ] [ ____C# ] [ ____StyleSheet ] [ ____C++ ] [ ____Winsock ] [ ____Thread ] [ ____VisualStudio ] [ ____C ] [ ____Win32API ] [ ____Lua ] [ ____PhotoShop ]
ヘッダ検索
___

■ 呼び出し規約





  DESC
    関数コールをするときにスタック上への引数の渡し方と、後方付けの方法をルール化したもの。

    複数の言語で呼び出し方が異なるため.
    関数呼び出し時の方法のこと。

  POINT
    
    
    よく使うものは次の3つ
     __cdecl    ( 呼ぶ側がスタックの方付けをする. C, C++ におけるデフォルトの規約 )
     __stdcall  ( 呼ばれた側がスタックの方付けをする. Win32 システム関数で採用されている ) 
     __this
呼び出し規約によって関数の修飾名も決まる。 呼び出し規約を変えると、 混合モードで表示されるアセンブラコードが代わることを確認できる。 デバッグ時にアセンブラコードをトレースする際に役にたつ。 call stack( stack ) への格納方法, 復帰方法, 名前修飾が異なる testcdecl( g_str, 1, 'a' );
    // 引数をスタックに push 
    push 61h
    push 1
    mov  eax, [g_str(0040000)]
    push
    
    // 関数をコール
    call testcdecl(0040000)

    // 後方付けは 呼ぶ側がする ( 12 byte スタックポインタを戻す ) 
    add esp, 0ch
___

■ cdecl

引数のセット順 右から左 関数名の修飾 _ がつく。( test() -> _test() ) スタック管理 呼び出し側がスタックを片つける intel86 系で使用される。 sensitive 戻り値は EAX に格納される。
    // 明示的に cdecl 規約で呼ぶことを宣言する。
    void _cdecl function( param );
___

■ stdcall

引数のセット順 左から右 関数名の修飾 _ と最後に @ と引数のバイト数をつける。( test() -> _test@4() ) スタック管理 呼ばれた側がスタックを片つける win32 API 標準. stack の掃除は sub func 自身でする( -> 可変長の引数 list は 未サポート ) POINT _XXX@N という関数名 N: 引数サイズ( ie. stack clean のサイズを通知 ) 引数をクリーンするためにサイズを知る必要があるということ
___

■ thiscall

引数のセット順 右から左 関数名の修飾 なし。 スタック管理 呼ぶ側がスタックを片つける _stdcall とほぼ同じ。 this ポインタは ecx に格納される。
___

■ firtstcall

register を利用して 引数渡しをする -> ということは, register は早い 戻り値は register, stack にはいる @XXX@N POINT
    呼び出し規約により, Symbol に変更が加えられる ( 数値は arg size )
    arg

    cdecl
    stdcall    : _ + (関数名) + @8
    fastcall   : @ + (関数名) + @8

















NINJAIDX 16