没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
年 月
原作
翻译 !"#$
%%% $
&践踏堆栈&'( 语言编程) 在许多 ( 语言的实现中*
有可能通过写入例程
中所声明的数组的结尾部分来破坏可执行的堆栈 所
谓&践踏堆栈&使用的
代码可以造成例程的返回异常*从而跳到任意的地址
这导致了一些极为
险恶的数据相关漏洞+已人所共知, 其变种包括堆栈
垃圾化+
,*堆栈乱写+,*堆栈毁坏
+,-
术语 并不使用*因为这从来不是故
意造成的 参阅 .
也请参阅同名的漏洞*胡闹内核+$
,*内存泄露+
,*优先权丢失+,*螺纹滑扣
+/%,
简 介
0000000
在过去的几个月中*被发现和利用的缓冲区溢出漏洞
呈现上升趋势 例如 *
/*1 2 3*4!567*
8* 等等 本文试图
解释什么是缓冲区溢出*以及如何利用
汇编的基础知识是必需的 对虚拟内存的概念*以及
使用 的经验是十分有益
的*但不是必需的 我们还假定使用 9!1:(;*
操作系统是 4!
在开始之前我们给出几个基本的定义<缓冲区*简单说
来是一块连续的计算机内
存区域*可以保存相同数据类型的多个实例 ( 程序
员通常和字缓冲区数组打交道
最常见的是字符数组 数组*与 ( 语言中所有的变量
一样*可以被声明为静态或动态
的 静态变量在程序加载时定位于数据段 动态变量
在程序运行时定位于堆栈之中
溢出*说白了就是灌满*使内容物超过顶端*边缘*或
边界 我们这里只关心动态
缓冲区的溢出问题*即基于堆栈的缓冲区溢出
进程的内存组织形式
00000000000000000000
为了理解什么是堆栈缓冲区*我们必须首先理解一个
进程是以什么组织形式在
内存中存在的 进程被分成三个区域<文本*数据和堆
栈 我们把精力集中在堆栈
区域*但首先按照顺序简单介绍一下其他区域
文本区域是由程序确定的*包括代码+指令,和只读数
据 该区域相当于可执行
文件的文本段 这个区域通常被标记为只读*任何对
其写入的操作都会导致段错误
+/,
数据区域包含了已初始化和未初始化的数据 静态变
量储存在这个区域中 数
据区域对应可执行文件中的 = 段 它的大小
可以用系统调用 +,来改变
如果 数据的扩展或用户堆栈把可用内存消耗光
了*进程就会被阻塞住*等待有了
一块更大的内存空间之后再运行 新内存加入到数据
和堆栈段的中间
/------------------\ 内存低地址
| |
| 文本 |
| |
|------------------|
| (已初始化) |
| 数据 |
| (未初始化) |
|------------------|
| |
| 堆栈 |
| |
\------------------/ 内存高地址
进程内存区域
什么是堆栈.
0000000000000
堆栈是一个在计算机科学中经常使用的抽象数据类型
堆栈中的物体具有一个特性<
最后一个放入堆栈中的物体总是被最先拿出来*这个
特性通常称为后进先处+49,队列
堆栈中定义了一些操作 两个最重要的是 ;> 和
;> 操作在堆栈的顶部加入一
个元素 操作相反*在堆栈顶部移去一个元素*
并将堆栈的大小减一
为什么使用堆栈.
0000000000000000
剩余63页未读,继续阅读
资源评论
- cake_kingdom2013-02-26翻译得还不错 作参考来看
helloxxxxx
- 粉丝: 1
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功