函数栈帧的创建和销毁(待写)
Posted 4nc414g0n
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数栈帧的创建和销毁(待写)相关的知识,希望对你有一定的参考价值。
函数栈帧的创建和销毁
main函数被调用的过程:
mainCRTStartup()
调用_tmainCRTStartup()
再调用main()
寄存器:
ebp(栈底指针),esp(栈顶指针)(sp 是esp的低16位,esp是rsp的低32位,ss是16位堆栈段寄存器
)
了解更多:x86汇编学习历程7----从1加到100并显示(引入栈)
具体过程
C代码如下:
#include <stdio.h> int Add(int x, int y) { int z = x + y; return z; } int main() { int a = 8; int b = 10; int c = 0; c= Add(a, b); return 0; }
反汇编出的汇编代码如下
:
int main()
{
00171760 push ebp
00171761 mov ebp,esp
00171763 sub esp,0E4h
00171769 push ebx
0017176A push esi
0017176B push edi
0017176C lea edi,[ebp+FFFFFF1Ch]
00171772 mov ecx,39h
00171777 mov eax,0CCCCCCCCh
0017177C rep stos dword ptr es:[edi]
0017177E mov ecx,17C003h
00171783 call 00171208
int a = 8;
00171788 mov dword ptr [ebp-8],8
int b = 10;
0017178F mov dword ptr [ebp-14h],0Ah
int c = 0;
00171796 mov dword ptr [ebp-20h],0
c= Add(a, b);
0017179D mov eax,dword ptr [ebp-14h]
001717A0 push eax
001717A1 mov ecx,dword ptr [ebp-8]
001717A4 push ecx
001717A5 call 001711C2
001717AA add esp,8
001717AD mov dword ptr [ebp-20h],eax
return 0;
001717B0 xor eax,eax
}
001717B2 pop edi
001717B3 pop esi
001717B4 pop ebx
001717B5 add esp,0E4h
001717BB cmp ebp,esp
001717BD call 00171212
001717C2 mov esp,ebp
001717C4 pop ebp
001717C5 ret
以上是关于函数栈帧的创建和销毁(待写)的主要内容,如果未能解决你的问题,请参考以下文章
图解C/C++语言底层:函数调用过程之函数栈帧的创建和销毁(上)