深入理解《hello world》是如何实现的

本文深入探讨C语言函数栈桢的概念,通过汇编代码分析main函数的创建与销毁过程,理解函数调用时栈帧的动态变化,包括ebp和esp寄存器的作用,以及函数返回的原理。同时,介绍了helloworld程序在底层的实现细节,旨在提升对编程基础知识的理解。
摘要由CSDN通过智能技术生成

❤️ :热爱编程学习,期待一起交流。 🙏:博主是河牧院大一在读学生,水平有限,如发现错误,期待指点!(2466200050)
🌳:以下是我对main函数栈帧的创建与销毁一些拙见,期待大佬们指教。

前言

在这里插入图片描述

  • 了解函数栈桢的目的是提高我们的基础知识功底,了解反汇编和内存,而不是会printf一个hello world,但不知道他是如何实现的,知其所以然。虽然学了这些并不能提高我们的算法能力,但看看到底是怎么运行的,有助于后期的学习,使我们向看代码是内存这个境界更近一步。
  • 正如图上达克效应一样,横坐标代表技术。纵坐标代表自信。我们并没有想象中的那么优秀,要学会从他人眼里看到自己的影子。也许你现在处于愚昧之巅,也许你处在绝望之谷,不过这都是正常的,只要我们认清自己,持续输出,一定会走向开悟之坡。

C语言是由函数构成的

  • C语言是由函数为单元模块构成的,不信的话,可以想象一下,每一次我们用C语言编写程序的时候,都需要写一个main()。而main()就是一个函数。
  • 就拿最简单的打印一句hello world来说,不就是在main函数里面的的吗。
  • 所以我们了解函数栈帧的创建和销毁,其实就在研究一个代码是如何实现的。
  • 我们在这里要用到汇编代码来演示函数栈帧的创建与销毁。

栈帧概念

  • C语言中,每个栈帧对应着一个未运行完的函数。栈帧中保存了该函数的返回地址和局部变量。

  • 栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。

  • 首先应该明白,栈帧是存放在内存中的栈区的。栈帧是栈区分配给进程的内存区
    在这里插入图片描述

  • 栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈帧的顶部(低地址)。

寄存器

ebp:栈底指针
esp:栈顶指针
esp和ebp是用来维护函数的。

  • 寄存器有很多,
评论 86
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乔 巴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值