Windows系统溢出漏洞分析基础1

Windows系统溢出漏洞分析基础1

为了更加清晰了解缓冲区溢出的工作原理,先了解一下Win32系统内存结构以及函数调用时内存的工作原理。

在Win32的环境下,可以有高级的语言来编写程序的经过编译,链接,最终生成可执行文件也就是(PE)文件,这里就不详细展开说了

Win32系统中,按照进程使用的内存按照功能可以分为四个领域

1代码区:存放程序汇编后的机器代码和只读数据

2数据区用于储存全局变量和静态变量

3堆区:该区域内存由进程利用函数或者运算符动态申请

4栈区:该区域内存系统自动分配,用于动态储存之间的调用关系。

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

缓冲区溢出漏洞就是向缓冲区写入数据时,由于没有做边界检查,导致了写入缓冲区的数据都超过了预先分配的边界,从而使溢出的数据覆盖在和大数据上,而引起得系统异常

目前缓冲区溢出漏洞存在于各种操作系统比如Windows,linux等等

介绍栈的溢出之前先对栈在程序运行中重要作用介绍一下

1.函数的栈帧

(1)栈顿的概念

在程序设计中,栈通常是指一种后进先出(Last In First Out,LIFO)的数据结构,而入栈(Push)和出栈(Pop)则是进行栈操作的两种常见方法。为了标识栈的空间大小,同时为了更方便地访问栈中数据,栈通常还包括栈顶(Top)和栈底(Base)两个栈指针。栈顶指针随入栈和出栈操作而动态变化,但始终指向栈中最后入栈的数据;栈底指针指向先入栈的数据,栈顶和栈底之间的空间存储的就是当前栈中的数据。

(2)栈帧的标识

Win32 系统提供了两个特殊的寄存器来标识当前栈帧。

•ESP:扩展我指针Txrendea Stack Pointer)寄存器,其存放的指针指向当前栈帧的

栈顶。

EBP:扩展基址指针(Extended Base Pointer)

寄存器,其存放的指针指向当前栈帧的

栈底。显然,ESP与EBP之间的空间即为当前栈帧空间。

(3)栈帧中的内容

一个函数栈帧中主要包含以下信息。

1)前一个栈帧的栈底位置,即前栈帧EBP,用于在函数调用结束后恢复主调函数的栈帧(前栈帧的栈顶可计算得到)。

2)该函数的局部变量。

3)函数调用的参数。

4)函数的返回地址RET,用于保存函数调用前指令的位置,以便函数返回时能恢复军

周用前的代码区中继续执行指令。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值