堆栈的缓冲区溢出
来源:互联网 发布:充值软件代理 编辑:程序博客网 时间:2024/06/11 16:42
堆栈的缓冲区溢出
我们在做项目的过程中遇到过一个问题:打开底层板卡,对板卡进行读写的时候,板卡的句柄莫名奇妙改变了,而我们没有显式改变过它。
其实这是一类问题,就是局部变量莫名其妙被修改。这是由于堆栈的缓冲区溢出造成的,主要现象是:1.某些局部变量莫名其妙被改 2.函数返回的时候崩溃
主要原因是:1. 数组越界 2.某些缓冲区拷贝函数如 sprintf ,strcpy,memcpy缓冲区溢出,在strcpy时是否注意‘\0'。
我们假设程序运行的栈是满递减的,那么程序在调用函数压栈过程如下:过程A调用过程B
A的栈帧在调用B之前,先将B的函数参数入栈,并将返回地址入栈,最后A的%ebp入栈,然后mov %esp,%ebp,进入B的栈帧。在B的栈中首先会申请所有的局部变量的栈空间,无论如何,数组中靠后的数一定比靠前的数的栈地址高,如A[8]会在高栈地址,A[0]在低端地址,因此A[8]之上还有其它局部变量,如果A数组溢出,会覆盖掉其它局部变量,甚至会覆盖掉过程B的返回地址导致程序崩溃。
以上是栈缓冲区溢出导致编程过程中的错误,还有一种情况是:某些全局变量被修改,或者程序调用不正常。这个我们用凌明老师给出的图来解释,如下,这个过程原因是堆栈溢出,即堆栈不够用,溢出的数据覆盖了相邻的全局后者静态数据区导致的。
分类: 计算机技术
- 堆栈的缓冲区溢出
- 堆栈式缓冲区溢出
- 堆栈和缓冲区溢出
- 堆栈和缓冲区溢出
- 践踏堆栈-缓冲区溢出漏洞
- 缓冲区溢出[函数调用时的堆栈变化]
- 堆栈 Cookie 检测代码检测到基于堆栈的缓冲区溢出
- 实践堆栈缓冲区溢出(1)
- 实践堆栈缓冲区溢出(2)
- 缓冲区溢出漏洞(二):堆栈和溢出.
- 缓冲区溢出的原理
- 缓冲区溢出的原理
- sprintf的缓冲区溢出
- 缓冲区溢出的原理
- 缓冲区溢出的问题
- 简单的缓冲区溢出
- 谈谈缓冲区的溢出
- 缓冲区溢出的例子
- struts2 业务类型的转换
- 豆瓣的框架
- 云存储
- 线程池概念 二、测试线程池如何执行任务
- CEGUI编译
- 堆栈的缓冲区溢出
- 抄录别人的总结
- SQL SERVER快速删除数据库表里面的记录,truncate与delete的对比 【转】
- C++ 与Objective-c 混合编程,让您的程序健步如飞
- Java 多线程同步 锁机制与synchronized
- 总结
- Debugging PL/SQL and Java Stored Procedures with JPDA
- 不要自称为程序员
- Linux系统下使用u盘