stdcall调用约定
来源:互联网 发布:域名冲突怎么解决 编辑:程序博客网 时间:2024/05/17 02:21
Stdcall调用约定是Win32系统下的标准调用方式,Stdcall的参数入栈是从右往左依次入栈,而平衡栈的工作是在被调用函数中完成的。
假设有三个参数,调用方式为func(param1, param2, param3); 反汇编的形式如下:
假设有三个参数,调用方式为func(param1, param2, param3); 反汇编的形式如下:
push param3
push param2
push param1
call func
CALL指令完成的工作为push retAddr/Jmp func,也就是将CALL后面的一条指令的地址入栈,然后跳转到被调用函数处。
跳转到被调用函数后,函数的入口通常为
push ebp
mov ebp, esp
sub esp, xx
首先保存前栈帧的ebp,然后为当前将ebp指向当前栈帧的栈底,最后在栈中开辟临时空间,也就是抬高栈顶。
函数返回时,函数的出口通常为
mov esp, ebp 或者add esp, xx
pop ebp
retn
mov esp, ebp和add esp, xx完成的功能是相同的,但是前者比后者的机器指令要短一个字节,这里是回收栈帧。
pop ebp是恢复上一个栈帧的栈底指针
retn是返回上一个函数。retn将返回地址,也就是前面的retAddr赋值给EIP,然后平衡栈,这时CPU就可以接着调用函数的位置处继续执行了。
- stdcall调用约定
- 函数调用约定 stdcall, cdecl
- 调用约定:cdecl,stdcall,fastcall
- cdecl、stdcall、fastcall函数调用约定区别
- cdecl, stdcall, pascal,fastcall 调用约定区别
- cdecl, stdcall, pascal,fastcall 调用约定区别
- cdecl、stdcall、fastcall函数调用约定区别
- cdecl, stdcall, pascal,fastcall 调用约定区别
- cdecl、stdcall、fastcall函数调用约定区别
- stdcall、cdecl调用约定方式详解
- cdecl、stdcall、fastcall函数调用约定区别
- cdecl、stdcall、fastcall函数调用约定区别
- cdecl, stdcall, pascal,fastcall 调用约定区别
- cdecl、stdcall、fastcall函数调用约定区别
- cdecl、stdcall、fastcall函数调用约定区别
- cdecl、stdcall、fastcall函数调用约定区别
- cdecl, stdcall, pascal,fastcall 调用约定区别
- cdecl、stdcall、fastcall函数调用约定区别
- [各种面试题] 请用Read4实现Read
- wince usb驱动中的OTGHNP_IsADevice函数
- code block 下链接mysql
- 如何加载显示jpg ,png bmp等图片,利用CImage
- C++实现设计模式: Factory 工厂模式
- stdcall调用约定
- 南阳理工学院csdn发展计划书
- 杭电OJ 1251 、1671(字典树)
- 黑马程序员---数组
- WinCE USB 驱动中IssueTransfer调用相关
- poj3210
- Wince USB otg驱动中关于函数CHub::HubStatusChangeThread
- JAVA&&JAVA WEB开发包U盘封装版
- freeRdp ---- 音频输出通道扩展