CSAPP (一): 栈帧, 计算机的世界观

本文介绍了计算机程序执行时的状态组成,重点讲解了IA-32架构中栈帧的概念,包括%esp和%ebp寄存器的作用。栈帧用于存储函数的局部变量和参数,每次函数调用都会创建一个新的栈帧。通过%ebp可以找到栈帧内的变量位置,而%esp则定义了栈帧的边界。文章通过C语言代码的汇编转换,详细阐述了栈帧的创建、使用和释放过程。
摘要由CSDN通过智能技术生成

概述

任一时刻, 计算机都在执行一个程序 (进程), 这个正在执行的状态可以用以下内容唯一确定:

  • 程序的代码
  • 当前寄存器组的状态
  • 堆和栈的数据

知道了以上三者, 可以唯一确定现在计算机正在执行哪个程序, 执行的是该程序的哪一个函数的哪一.

由于程序的代码一般是不变的, 所以一个程序的多个实例如果同时执行(同一程序的多个进程), 那么它们共享同一个程序代码, 但是每一个进程都有自己各自的寄存器组状态和堆栈数据. 同理, 同一进程的多个线程拥有各自的寄存器组状态和栈, 共享同一个进程的堆栈数据.

本专题以 IA-32 架构为语境.

寄存器

名称 用法
%eax 随便用
%ebx 随便用, 使用完要恢复初值
%ecx 随便用
%edx 随便用
%esi 随便用, 使用完要恢复初值
%edi 随便用, 使用完要恢复初值
%esp 指向栈顶, 表示当前栈帧的上界
%ebp 表示当前栈帧的下界, 即函数的作用域
%eip 表示下一个要执行代码
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值