美文网首页
函数栈帧以及调用约定相关的一些总结

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

作者: bluewind1230 | 来源:发表于2018-03-04 09:56 被阅读0次
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 从左至右 被调用者负责

_cdecl:


image.png
image.png

_stdcall:


image.png
_fastcall:
image.png
_thiscall:
image.png
image.png
栈中局部变量布局:
image.png
image.png
image.png
image.png

函数举例:bar(z,y):


image.png
image.png
函数栈帧的一些总结:
image.png image.png image.png
image.png image.png
image.png image.png image.png image.png image.png
image.png image.png
image.png
image.png
image.png image.png

相关文章

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

    局部变量1--->Ebp-4 局部变量开始原始ebp寄存器值--->Ebp +0 原始ebp寄存器值返回地址--...

  • 打印函数调用堆栈

    相关函数签名 backtrace():栈回溯,保存各个栈帧的地址。该函数用于获取当前线程的函数调用堆栈,获取的信息...

  • 宏、普通函数、内联函数之间的区别

    普通函数 调用时向栈中push函数帧,调用结束后pop函数帧。编译器会在函数调用语句的前后,插入入栈和出栈的辅助代...

  • 5. linux下的栈帧分析

    @toc 1.linux下的栈帧分析2. 栈帧 1. 栈帧 每一次函数的调用,都会在调用栈上维护一个独立的栈帧(s...

  • 11-27函数

    函数 函数的重点是识别调用约定、参数类型和返回值类型 调用约定: cdecl调用方平栈 stdcall被调用方平栈...

  • 巧用函数栈实现栈的反转

    一、函数栈 函数的调用过程其实就是一个压栈的过程,在函数栈中,每个函数所占空间成为一个 栈帧。栈帧中保存着函数的形...

  • C 与汇编程序的约定调用

    1.说明 函数调用时通过栈帧来实现的,栈帧是指为一个单独的函数调用单独分配的那部分栈空间。当运行中的程序调用另一个...

  • Stack Queue

    在函数调用的过程中,操作系统使用函数调用栈来维护函数调用的状态。每个函数运行过程中有一段属于自己的栈帧结构,主要用...

  • 8086汇编三——AT&T栈帧-汇编C混编

    什么叫栈帧?就是函数的调用环境。bp和sp中间那一段就是函数调用环境。 在AT&T环境下栈帧是有点不一样的: 1、...

  • 2017-07-17

    在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回...

网友评论

      本文标题:函数栈帧以及调用约定相关的一些总结

      本文链接:https://www.haomeiwen.com/subject/anxyzxtx.html