汇编 ? cdecl 函数调用约定,stdcall 函数调用约定
Posted whzym111
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编 ? cdecl 函数调用约定,stdcall 函数调用约定相关的知识,希望对你有一定的参考价值。
知识点: ? cdecl 函数调用约定 ? stdcall 函数调用约定 ? CALL堆栈平衡 配置属性--> c/c++ -->高级-->调用约定 一、cdecl调用约定 VC++默认约定__cdecl 1、源代码 int __cdecl add1(int a,int b) { return a+b; } 2、生成汇编代码 00401000 /$ 55 PUSH EBP 00401001 |. 8BEC MOV EBP,ESP 00401003 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] 00401006 |. 0345 0C ADD EAX,DWORD PTR SS:[EBP+C] 00401009 |. 5D POP EBP 0040100A \. C3 RETN ; POP EIP 3、调用代码 push b push a call add1 add esp,8 00401031 |. 6A 02 PUSH 2 ; 0012FF7C 00401033 |. 6A 01 PUSH 1 00401035 |. E8 C6FFFFFF CALL stdcall_.00401000 ; __cdecl add1 0040103A |. 83C4 08 ADD ESP,8 ; RETN 8 二、stdcall调用约定 API函数约定 __stdcall 1、源代码 int __stdcall add2(int a,int b) { return a+b; } 2、生成汇编代码 00401010 /$ 55 PUSH EBP 00401011 |. 8BEC MOV EBP,ESP 00401013 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] 00401016 |. 0345 0C ADD EAX,DWORD PTR SS:[EBP+C] 00401019 |. 5D POP EBP 0040101A \. C2 0800 RETN 8 ; RETN 8 //ADD ESP,8 3、调用代码 push b push a call add2 0040103D |. 6A 04 PUSH 4 ; 0012FF7C 0040103F |. 6A 03 PUSH 3 00401041 |. E8 CAFFFFFF CALL stdcall_.00401010 ; __stdcall add2 PUSH 下一个EIP
以上是关于汇编 ? cdecl 函数调用约定,stdcall 函数调用约定的主要内容,如果未能解决你的问题,请参考以下文章
调用约定_stdcall _cdecl _fastcall的区别
C++函数调用方式约定stdcall,cdecl,pascal,naked,thiscall,fastcall