_cdecl与_stdcall区别
2014-06-06 08:42
204 查看
_cdecl与_stdcall是最常用的的两种函数调用修饰,区别在于函数返回时,清理栈(恢复栈平衡)是caller做还是被调函数做。
4: _cdecl int add1(int a, int b) 5: { 00401020 push ebp 00401021 mov ebp,esp 00401023 sub esp,40h 00401026 push ebx 00401027 push esi 00401028 push edi 00401029 lea edi,[ebp-40h] 0040102C mov ecx,10h 00401031 mov eax,0CCCCCCCCh 00401036 rep stos dword ptr [edi] 6: return a+b; 00401038 mov eax,dword ptr [ebp+8] 0040103B add eax,dword ptr [ebp+0Ch] 7: } 0040103E pop edi 0040103F pop esi 00401040 pop ebx 00401041 mov esp,ebp 00401043 pop ebp 00401044 ret 9: _stdcall int add2(int a, int b) 10: { 00401060 push ebp 00401061 mov ebp,esp 00401063 sub esp,40h 00401066 push ebx 00401067 push esi 00401068 push edi 00401069 lea edi,[ebp-40h] 0040106C mov ecx,10h 00401071 mov eax,0CCCCCCCCh 00401076 rep stos dword ptr [edi] 11: return a+b; 00401078 mov eax,dword ptr [ebp+8] 0040107B add eax,dword ptr [ebp+0Ch] 12: } 0040107E pop edi 0040107F pop esi 00401080 pop ebx 00401081 mov esp,ebp 00401083 pop ebp 45 00401084 ret 8
相关文章推荐
- __cdecl,__fastcall, __stdcall 什么区别?
- [转载]cdecl, stdcall, pascal,fastcall 都有什么区别,具体是什么调用约定?
- __cdecl和__stdcall的区别
- 函数调用方式的区别[thiscall,__cdecl,__stdcall]
- __stdcall,__cdecl,_cdecl,_stdcall,。__fastcall,_fastcall 区别简介
- cdecl, stdcall, pascal,fastcall 都有什么区别,具体是什么调用约定?
- __cdecl __fastcall与 __stdcall的区别
- _stdcall 与 _cdecl 的区别
- _stdcall 与 _cdecl 的区别
- cdecl, stdcall, pascal,fastcall 都有什么区别,具体是什么调用约定?
- _stdcall 与 _cdecl 的区别
- _stdcall 与 _cdecl 的区别(转载)
- __stdcall __cdecl的区别
- 函数调用规范__cdecl和__stdcall的区别
- 函数调用规范__cdecl和__stdcall的区别一目了然(表格形式)
- 函数调用规范__cdecl和__stdcall的区别
- __cdecl,__fastcall, __stdcall 什么区别?【转贴】
- _stdcall 与 _cdecl 的区别
- __cdecl和__stdcall的区别
- cdecl, stdcall, pascal,fastcall 都有什么区别,具体是什么调用约定?