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

xiaoxiao2021-02-28  45

文章目录

栈分布几种寻址方式:

栈分布

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从左至右被调用者负责
转载请注明原文地址: https://www.6miu.com/read-2621532.html

最新回复(0)