函数栈帧的创建和销毁(待写)

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

以上是关于函数栈帧的创建和销毁(待写)的主要内容,如果未能解决你的问题,请参考以下文章