函数栈帧以及调用约定相关的一些总结

栈分布

在这里插入图片描述

Ebp-4  局部变量开始
Ebp +0 原始ebp寄存器值
Ebp+4 返回值
Ebp+8形参1
Ebp+12 形参2
Ebp+16 形参3
局部变量1--->Ebp-4 局部变量开始
原始ebp寄存器值--->Ebp +0 原始ebp寄存器值
返回地址-->Ebp+4 返回值
形参1-->Ebp+8
形参2-->Ebp+12 形参2

打开栈帧:

Push Ebp;
Mov ebp,esp;
Sub esp,40(拉开栈)

几种寻址方式:

立即数寻址: mov eax,1;
寄存器寻址:mov eax,ebx;
存储器寻址:mov eax,[XXX]:(分为以下几种:)
1.寄存器直接寻址:mov eax,[1000];
2.寄存器间接寻址:mov eax,[ebx];
3.寄存器相对寻址:mov eax,[ebx+5]
4. 寄存器基址变址寻址:mov eax,[ebx+edi];
5.寄存器相对基址变址寻址:mov eax,[ebx+edi+5];

调用约定关键字参数入栈顺序回收堆栈
C-调用约定__Cdecl从右至左调用者负责
标准调用规范__stdcall从右至左被调用者负责
快速调用规范__fastcall从右至左 (使用寄存器传参)被调用者负责
Pascal调用规范pascal从左至右被调用者负责
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值