首页 > 其他分享 >栈帧浅析,堆栈漏洞概述——【太原理工大学软件安全期末补充】

栈帧浅析,堆栈漏洞概述——【太原理工大学软件安全期末补充】

时间:2024-06-21 21:29:22浏览次数:28  
标签:调用 函数 函数调用 栈帧 堆栈 Stack 浅析 溢出

在上一篇文章中我说实验一不重要,确实没必要完全按照实验内容逐字逐句理解,但是这里我们补充一个知识点

栈帧(Stack Frame)是计算机程序执行过程中,调用栈(Call Stack)中的一个单元,它包含了函数调用时的上下文信息。每当一个函数被调用时,一个新的栈帧就会被创建并被推入调用栈。栈帧通常包含以下信息:

1. **返回地址**:函数执行完毕后,控制权返回到调用者的地方的地址。
2. **局部变量**:函数内部定义的局部变量,它们只在函数的作用域内可见。
3. **参数**:传递给函数的参数值。
4. **寄存器保存**:在某些情况下,函数调用可能会保存一些寄存器的值,以确保它们在函数执行期间不会被覆盖。
5. **栈指针**:指向当前栈帧的指针。

当函数执行结束时,它的栈帧会被弹出调用栈,控制权和状态会恢复到调用它的函数的栈帧。这个过程是程序流程控制的基础之一,确保了函数调用的有序性和数据的隔离性。

缓冲区

程序中所使用的缓冲区可以是堆区和栈区,也可以是存放静态变量的数据区。

### 栈溢出(Stack Overflow)
1. **定义**:栈溢出发生在程序的调用栈超出其分配的内存空间时。调用栈用于存储函数调用的上下文信息,包括局部变量、参数、返回地址等。
2. **原因**:通常是由于递归调用太深或循环调用太频繁,导致栈空间被耗尽。

### 堆溢出(Heap Overflow)
1. **定义**:堆溢出发生在程序的堆内存超出其分配的内存空间时。堆用于动态内存分配,存储程序运行时创建的对象和数据结构。
2. **原因**:可能由于程序中存在内存泄漏(未释放不再使用的对象),或者分配了过大的内存块,导致堆空间耗尽。

就这些,不多。

标签:调用,函数,函数调用,栈帧,堆栈,Stack,浅析,溢出
From: https://blog.csdn.net/goldfish8848/article/details/139782285

相关文章

  • MySQL bit类型增加索引后查询结果不正确案例浅析
    昨天同事遇到的一个案例,这里简单描述一下:一个表里面有一个bit类型的字段,同事在优化相关SQL的过程中,给这个表的bit类型的字段新增了一个索引,然后测试验证时,居然发现SQL语句执行结果跟不加索引不一样。加了索引后,SQL语句没有查询出一条记录,删除索引后,SQL语句就能查询出几十条记录。......
  • 浅析Vite本地构建原理
    前言随着Vue3的逐渐普及以及Vite的逐渐成熟,我们有必要来了解一下关于vite的本地构建原理。对于webpack打包的核心流程是通过分析JS文件中引用关系,通过递归得到整个项目的依赖关系,并且对于非JS类型的资源,通过调用对应的loader将其打包编译生成JS代码,最后再启动开发服务器。了解......
  • 探究C语言函数栈帧的创建和销毁
    引言在C语言程序中,每当一个函数被调用时,系统都会在栈上为该函数分配一块内存空间,这块内存空间就被称为栈帧。栈帧中包含了函数执行所需的所有信息,如局部变量、参数、返回地址等。栈帧的创建和销毁是函数调用的核心部分,它们确保了函数能够正确地执行和返回。本文将在VS2013环......
  • Visual Studio + Qt项目 数组超界不会报错。 堆栈 Cookie 检测代码检测到基于堆栈
    使用vs+Qt项目时,数组超界不会崩溃和报错的问题。 开启以下2个即可。  注意:1.启用了地址擦除系统会造成QT的异常崩溃,原因未知。2.有时会报cookie的错误,数组超界了,在退出函数时才会报错。   ......
  • ARMv7 寄存器 工作模式 和指令集 和 堆栈回溯
    因此,在图4-1中,如果处理器是在IRQ模式,我们可以看见R0,R1...R12(与在用户模式看到的相同的寄存器),加上SP_IRQ和LR_IRQ(仅在IRQ模式中可以访问的寄存器)和R15(程序计数器,PC)。我们通常不必指定模式中的寄存器名。如果我们在一行代码中引用R13,处理器会访问当前模式对应的SP寄存器。......
  • 浅析Mybatis拦截器
    一、背景最近针对项目中出现的慢sql,我们使用自定义Mybatis拦截器,结合DUCC动态配置慢sql阈值,来监控慢sql并报警,提前发现风险点。借着这个契机,浅析下Mybatis拦截器原理,个人理解,不足之处请指正。二、Mybatis拦截器Mybatis使用plugin来拦截方法调用,所以MyBatisplugin也称为:Mybatis......
  • 堆栈图
    存储参数1.push先执行push2,在push1。栈从上往下(1,2是参数)call—〉返回一个地址,并将下一个指令地址存入栈中401171—〉函数执行完的返回地址(简称返回地址)保留栈底2.pushebp将ebp里的值放入了栈里面提升栈顶3.movebp,esp将esp里的值放入ebp中4.Subesp,40esp-四零,(四......
  • 数据库的读现象浅析
    “读现象”是多个事务并发执行时,在读取数据方面可能碰到的状况。先了解它们有助于理解各隔离级别的含义。其中包括脏读、不可重复读和幻读。脏读脏读又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2......
  • python栈帧沙箱逃逸
    python栈帧沙箱逃逸一、生成器生成器(Generator)是Python中一种特殊的迭代器,它可以通过简单的函数和表达式来创建。生成器的主要特点是能够逐个产生值,并且在每次生成值后保留当前的状态,以便下次调用时可以继续生成值。这使得生成器非常适合处理大型数据集或需要延迟计算的情况。......
  • 浅析嵌入式实时系统中信号量的概念
    目录概述1.认识信号量1.1定义信号量1.2信号量的类型1.2.1二值信号量1.2.2计数信号量1.2.3互斥信号量1.2.3.1认识互斥信号量1.2.3.2互斥信号量的其他特性2典型信号量的使用2.1等待和信号同步2.2多任务等待和信号同步2.3信用跟踪同步 2.4单一共享资......