|
博彩赞助球队博彩公司英雄联盟(www.majesticsportsline.com) 乐鱼炸金花 众人都知说念函数调用是通过栈来达成的,况兼知说念在栈中存放着该函数的局部变量。然而关于栈的达成细节可能不一定明晰。本文将先容一下在Linux平台下函数栈是若何达成的。 博彩公司英雄联盟www.majesticsportsline.com 栈帧的结构函数在调用的时辰都是在栈空间上开拓一段空间以供函数使用,是以,咱们先来了解一下通用栈帧的结构。
如图所示,栈是由高地址向地地址的标的滋长的,况兼栈有其栈顶和栈底,入栈出栈的地点就叫作念栈顶。 皇冠hg86a在x86系统的CPU中,rsp是栈指针寄存器,这个寄存器中存储着栈顶的地址。rbp中存储着栈底的地址。函数栈空间主如若由这两个寄存器来礼服的。 当次第入手时,皇冠足球栈指针rsp不错移动,栈指针和帧指针rbp一次只可存储一个地址,是以,任何时辰,这一双指针指向的是兼并个函数的栈帧结构。 而帧指针rbp是不移动的,探询栈中的元素不错用-4(%rbp)能够8(%rbp)探询%rbp指针底下能够上头的元素。 在廓清了这些之后,底下咱们来看一个具体的例子: #include <stdio.h> int sum (int a,int b) { int c = a + b; return c; } int main() { int x = 5,y = 10,z = 0; z = sum(x,y); printf("%d\r\n",z); return 0; }
反汇编如下,底下咱们就对照汇编代码一步一步分析下函数调用历程中栈的变化。 火博体育官方入口0000000000000000 <sum>: 0: 55 push %rbp 1: 48 89 e5 mov %rsp,%rbp 4: 89 7d ec mov |


